ubuntu 8.10下用C写的socket服务器程序,调用close关闭和客户端的连接,close返回是0,但是tcpdump发现双方都没发fin包,在服务器和客户机上netstat也发现tcp连接一直是established状态,最终只能关掉服务器程序才行……没有专门的客户端程序,服务器程序是处理HTTP的东西,所以客户端直接是IE~~ 高手帮下忙~~~
因为在嵌入式linux , 有很多命令都不支持, 所以用netstat -a 看到有大量的close _wait 连接,苦于没有办法知道具体数目 有什么好的办法没有? 我用如下命令得到的432 就是我现在的socket的连接个数? ~ $ more /proc/sys/fs/file-nr 432 0 9351
本帖最后由 iw1210 于 2013-01-18 23:12 编辑 TCP连接时,服务器端可以通过accept函数的返回值获得客户端socket的描述符。UDP连接时服务器端怎么才能知道对方socket的描述符呢?
linux 下,用socket建立通信后,当出现异常时需要进行处理,那通过什么方法知道下面的异常情况呢? 1。对方中断连接。 2。网络断开(如网线被拔了等)
现在的环境是linux,已经把fd NOFILE的限制改为了65536 但是运行大并发请求链接的时候,大约到了数值后就不会在增加,用netstat去查看发现都是FIN_WAIT. 是不是达到了socket的连接数上限了。如何修改socket的连接数限制!谢谢!
在linux socket关闭连接的方法有两种分别是shutdown和close,首先看一下shutdown的定义 #include int shutdown(int sockfd,int how); how的方式有三种分别是 SHUT_RD(0):关闭sockfd上的读功能,此选项将不允许sockfd进行读操作。 SHUT_WR(1):关闭sockfd的写功能,此选项将不允许sockfd进行写操作。 SHUT_RDWR(2):关闭sockfd的读写功能。 成功则返回0,错误返回-1,错误码errno:EBADF表示sockfd不是一个有效描述符;ENOT...
检测socket客户端异常断开时候可不可以这样子? int numbytes = recv(Jinfo->clientfd, receive, rcvlen, 0); if ( numbytes <= 0){ if (errno == EINTR){ 被中断 继续循环 } int s_errno; socklen_t len_t = sizeof(s_errno); if (getsockopt(Jinfo->clientfd, SOL_socket, SO_ERROR, &s_errno, &len_t) == -1){ printf("we have a SO_ERROR on socket %d, close and return it!\n", Jinfo->clientfd); close (Jinfo->cli...
检测socket客户端异常断开时候可不可以这样子? int numbytes = recv(Jinfo->clientfd, receive, rcvlen, 0); if ( numbytes <= 0){ if (errno == EINTR){ 被中断 继续循环 } int s_errno; socklen_t len_t = sizeof(s_errno); if (getsockopt(Jinfo->clientfd, SOL_socket, SO_ERROR, &s_errno, &len_t) == -1){ printf("we have a SO_ERROR on socket %d, close and return it!\n", Jinfo->clientfd); close (Jinfo->cli...