在编写socket程序的时候,遇到一个奇怪的问题,服务端用accept接收请求,客户端通过telnet连接上去。结果每次连上去以后连接又立即断开了,而server端accept以后并没有close连接。
代码如下:
/*server*/
int main()
{
//...
socklen_t cli_len;
struct sockaddr_in clientaddr;
while(1)
{
int connfd = accept(listenfd, (struct sockaddr *)&clientaddr, &cli_len);
if(connfd < 0)
{
perror("accept");
}
//...
}
return 0;
}
最后发现是初始化的问题,cli_len和clientaddr不能为负值,因为上面没有初始化,所以在accept的时候会出问题。最后加上初始化的代码,问题就解决了。
/*server*/
int main()
{
//...
socklen_t cli_len;
struct sockaddr_in clientaddr;
while(1)
{
memset(&clientaddr, 0, sizeof(struct sockaddr_in));
cli_len = 1;
int connfd = accept(listenfd, (struct sockaddr *)&clientaddr, &cli_len);
if(connfd < 0)
{
perror("accept");
}
//...
}
return 0;
}
本文探讨了一个关于Socket编程中遇到的奇怪问题,即客户端通过telnet连接服务器后立即断开的情况。通过分析和调试,发现是由于未正确初始化客户端地址结构导致的问题,并给出了修复代码。

459

被折叠的 条评论
为什么被折叠?



