-1
这里是我的服务器代码,不知道我是如何得到我的Mac上错误的选择():无效的参数
failed to select : Invalid argument
其做工精细,但不能在Linux上。 有人能告诉我我做错了吗?
我只是新的begynniner在C编程。
server.c
int server(int port){
int request_sd, newfd;
socklen_t clientaddrlen;
fd_set masterList;
fd_set readFd;
int bind_adress = 0, listen_connect = 0;
int fd_max;
int select_client, i;
struct sockaddr_in server_adr;
struct sockaddr_in client_adr;
if (!getcwd(root_path, PATH_LEN))
{
perror("set path");
}
request_sd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
if (request_sd < 0)
{
perror("failed: ");
return -1;
}else printf("create new socket i complete: %d\n", request_sd);
memset(&server_adr, 0 , sizeof (struct sockaddr_in));
server_adr.sin_family = AF_INET;
server_adr.sin_addr.s_addr = INADDR_ANY;
server_adr.sin_port = htons(port);
int activate = 1;
if (setsockopt(request_sd, SOL_SOCKET, SO_REUSEADDR, &activate, sizeof(int)) == -1)
{
perror("setsockopt: ");
return -1;
}
bind_adress = bind(request_sd, (struct sockaddr*) &server_adr, sizeof(struct sockaddr_in));
if (bind_adress < 0)
{
perror("failed to bind : ");
return -1;
}
listen_connect = listen(request_sd, 10);
if (listen_connect <0)
{
perror("failed to listen : ");
return -1;
}
printf("\nListening for connections on port: %d\n\n", port);
fflush(stdout);
FD_ZERO(&masterList);
FD_ZERO(&readFd);
FD_SET(request_sd, &masterList);
fd_max = request_sd;
while(1){
readFd = masterList;
if((select_client = select(fd_max+1, &readFd, NULL, NULL, NULL)) < 0){
perror("FAILED TO SELECT");
}
for (i = 0; i <= fd_max; i++)
{
if(FD_ISSET(i,&readFd))
{
if(i == request_sd)
{
newfd = accept(request_sd, (struct sockaddr*) &client_adr,
(socklen_t *) &clientaddrlen);
if (newfd == -1)
{
perror("failed to accept :");
return -1;
}
FD_SET(newfd, &masterList);
if (newfd > fd_max)
{
fd_max = newfd;
}
在'-Wall -Wextra -pedantic'上编译所有警告。你得到了什么? – alk 2014-11-23 15:02:40
Filtjener.c:88:5:警告:(这将只在每个输入文件中报告一次) Filtjener.c:函数'ls_handler'中: Filtjener.c:106:警告:ISO C90禁止混合声明和代码 Filtjener.c:103:警告:未使用的参数'包' Filtjener.c:在函数'cd_handler'中: Filtjener.c:127:警告:未使用的参数'包' Filtjener.c:在函数'info_handler'中: Filtjener.c:200:警告:ISO C90禁止混合声明和代码 – TKP 2014-11-23 15:23:00
Filtjener.c:在函数'cat_handler'中: Filtjener.c:250:警告:在有符号和无符号整数表达式之间进行比较 Filtjener.c:230:warning :未使用的参数'currentPath' Filtjener.c:在函数'action'中: Filtjener.c:319:警告:ISO C90禁止混合声明和代码 Filtjener.c:函数'server'中: Filtjener.c:408:警告:ISO C90禁止混合声明和代码 Filtjener.c:463:警告:ISO C90禁止混合声明和代码 – TKP 2014-11-23 15:23:28