http://adam281412.blog.163.com/blog/static/3370006720120123035967/
在编写socket程序的时候,遇到一个奇怪的问题,服务端用accept接收请求,客户端通过telnet连接上去。结果每次连上去以后连接又立即断开了,而server端accept以后并没有close连接。
代码如下:
C代码
- /*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的时候会出问题。最后加上初始化的代码,问题就解决了。
C代码 

- /*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编程中使用accept函数接收客户端连接时遇到的问题。客户端通过telnet连接后立即断开,而服务器端未主动关闭连接。通过正确初始化clientaddr和cli_len解决了这一问题。

5347

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



