检测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...
我在linux下开发一个小型的http server, 并使用了select模型, 为每个客户端创建了一个异步的socket. 如果客户端下载完一个Url后,此Server就关闭此socket的, 这样的情况下此Server可以同时支持5个不同的客户端. 如果一个客户端没有下载完一个Url时, 突然关闭.而此时此Serverd端如何及时发现对方的socket已经关闭, 并把和此客户端的对应的socket给予关闭. 我查找了一些资料, 如果给已经关闭的socket写数据, 第一次将返回RST, 第二次...
小弟在编程过程中遇到一个问题,server端fork一个子进程来处理client端的连接,如果这个client端非正常退出的时候,server端怎么能够检测到client端已经退出,并把这个子进程杀掉呢? 多谢了!在线等。
使用select调用来测试socket连接的状态(fd_set中的execptfds)是否保证可信? 有没有非正常的socket状态,select无法检测到的? 我想采用超时的方式来处理,比如对多个socket遍历,在6分钟内没有数据传输的,我就认为它出问题了,因为我会在最长为5分钟的时间内发送数据或者心跳,但这种办法看起来似乎比较笨,但这种办法基本上可以保证数据的传输,至少丢数的机会比较少。 现在我想看看select调用能否达到这个目的,有什么需要注意...
在MSDN中对shutdown函数中的Remarks部分有下面一段话,指出了如何进行一次优雅的slcket关闭: To assure that all data is sent and received on a connected socket before it is closed, an application should use shutdown to close connection before calling closesocket. For example, to initiate a graceful disconnect: Call WSAAsyncSelect to register for FD_CLOSE notification. Call shutdown with how=SD_SEND....
fd_accept 是已经连接socket 我使用 read(fd_accept, buffer,1-111); 然后close(fd_accept) ;//这里会发送一个RST分解而不是FIN 为什么呢?我期望是FIN 是不是对有错误的socket close也导致RST?
假设有这么两个进程,一个服务端进程,一个客户端进程. 我的客户端进程向服务端进程发送数据,但服务端进程不接收缓冲区里的数据. 当服务端进程的接收缓冲区里有了一堆数据的时候,我的客户端进程执行了close, 这个时候我的服务端进程怎么才能获取客户端的关闭信号?