我是一名能翻译文本的助手。
我在Linux(UNIX)套接字下进行socket编程比较新。我在网上找到了以下代码,用于为每个连接生成一个线程的TCP服务器。然而它并没有起作用。accept()函数会立即返回,并不等待连接。我做错了什么?
以下是代码:
我在Linux(UNIX)套接字下进行socket编程比较新。我在网上找到了以下代码,用于为每个连接生成一个线程的TCP服务器。然而它并没有起作用。accept()函数会立即返回,并不等待连接。我做错了什么?
以下是代码:
int main(int argv, char *args[])
{
struct sockaddr_in addr;
int sd, port;
port = htons(SERVER_PORT);
/*--- create socket ---*/
sd = socket(PF_INET, SOCK_STREAM, 0);
if ( sd < 0 )
panic("socket");
/*--- bind port/address to socket ---*/
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = port;
addr.sin_addr.s_addr = INADDR_ANY; /* any interface */
if ( bind(sd, (struct sockaddr*)&addr, sizeof(addr)) != 0 )
panic("bind");
/*--- make into listener with 10 slots ---*/
if ( listen(sd, 10) != 0 )
panic("listen")
/*--- begin waiting for connections ---*/
else
{ int sd;
pthread_t child;
FILE *fp;
while (1) /* process all incoming clients */
{
sd = accept(sd, 0, 0); /* accept connection */
fp = fdopen(sd, "wr+"); /* convert into FILE* */
pthread_create(&child, 0, servlet, fp); /* start thread */
pthread_detach(child); /* don't track it */
}
}
}
accept
的返回值,如果它是-1
,你也没有检查errno
。 - Jonathan Wakely