2012-04-09 10 views
0

私はサーバーアプリケーションを作成していて、ソケットに問題があります。 サーバー側selectは、クライアントが接続しようとしても常に0を返します。私はselectをコメントし、まっすぐacceptラインに行くとき、すべてが動作します(ただし、私のアプリケーションがブロックされている)着信ソケット接続を検出しています

サーバコード(Cで):

int sockfd = socket(AF_INET, SOCK_STREAM, 0); 
memset((char *) &serv_addr, 0, sizeof (serv_addr)); 
serv_addr.sin_family = AF_INET; 
serv_addr.sin_addr.s_addr = INADDR_ANY; 
serv_addr.sin_port = htons(System_->commParams.port); 
bind(sockfd, (struct sockaddr *) &serv_addr, sizeof (serv_addr)); 
fd_set fds; 
timeval tv; 
FD_ZERO(&fds); 
FD_SET(sockfd, &fds); 
int retval = 0; 
tv.tv_sec = 1; 
tv.tv_usec = 0; 
listen(sockfd, 5); 
while (retval == 0) 
{ 
    retval = select(1, &fds, NULL, NULL, &tv); 
    tv.tv_sec = 1; 
    tv.tv_usec = 0; 
    FD_ZERO(&fds); 
    FD_SET(sockfd, &fds);   
} 
unsigned int clilen = sizeof (cli_addr); 
int newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen); 

クライアントコード(()Pythonで:

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.connect((RemoteIP, Port)) 

答えて

5
retval = select(1, &fds, NULL, NULL, &tv); 

への最初の引数はsockfd + 1である必要があります。

0
retval = select(1, &fds, NULL, NULL, &tv); 

1は少し低いです。試してください:

retval = select(sockfd+1, &fds, NULL, NULL, &tv); 
関連する問題