当前位置: 技术问答>linux和unix
关于socket的一个简单问题!
来源: 互联网 发布时间:2015-05-09
本文导语: 在服务器端accept到一个socket,然后客户端close(socket),这个时候服务器端如何才能知道当前socket连接被关闭了? | 客户端close后TCP会发送一个FIN到服务器, 此时服务器上阻塞在此socket上的读函...
在服务器端accept到一个socket,然后客户端close(socket),这个时候服务器端如何才能知道当前socket连接被关闭了?
|
客户端close后TCP会发送一个FIN到服务器,
此时服务器上阻塞在此socket上的读函数返回0字节
服务器接口进入CLOSE_WAIT状态(用netstat)可以察看。
...
你找一本书看吧,推荐《unix网络编程》卷一
此时服务器上阻塞在此socket上的读函数返回0字节
服务器接口进入CLOSE_WAIT状态(用netstat)可以察看。
...
你找一本书看吧,推荐《unix网络编程》卷一
|
我想你是遇到了这样一个问题:java编程时,客户端的数据写完后退出了,但是服务端还没有读取完数据,所以报告了一个错误。
如果是这样,你只要在客户端写完数据后,显示的调用close方法,那么该方法自然会等到服务端不用该socket时关闭对象
如果是这样,你只要在客户端写完数据后,显示的调用close方法,那么该方法自然会等到服务端不用该socket时关闭对象
|
如果是非阻塞方式,应该用select。连接被关闭后,accept也是返回0。
|
网上可以下载到这本书。
|
如果使用非阻塞IO,read读不到数据时会返回-1, 但这时候errno被设置为EWOULDBLOCK(我记得好象是这个错误码),你可以根据这个来判断。如果对方close后,read一样返回0.
|
用READ去读,如果