- 论坛徽章:
- 0
|
- int main()
- {
- int n=0;
- long i=0;
- int listenfd,connfd;
- struct sockaddr_in servaddr;
- char buff[MAXLINE];
- listenfd=socket(AF_INET,SOCK_STREAM,0);
- bzero(&servaddr,sizeof(servaddr));
- servaddr.sin_family=AF_INET;
- servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
- servaddr.sin_port=htons(10001);
- bind(listenfd,(SA*)&servaddr,sizeof(servaddr));
- listen(listenfd,LISTENQ);
- for(;;)
- {
- connfd=accept(listenfd,(SA *)NULL,NULL);
- while(1)
- {
- n=read(connfd,buff,MAXLINE);
- printf("%d:the number of read is %d\n",i,n);
- i++;
- }
- }
- return 0;
- }
复制代码 最基础的SOcket编程服务器端程序,在Linux上运行,我在另一台Windows主机上运行 TCP/UNP调试工具建立客户端连接,在客户端上可以正常的发送数据,但是我断开客户端后,服务器程序就不断的执行 read()这条语句,并且返回得到的字符数是0.
为什么会发生这种情况呢?当没有数据可读的时候read不是应该被堵塞的吗? 如果是因为connfd不存在造成的,那我应该怎么检测来避免这个问题发生呢? |
|