当前位置: 技术问答>linux和unix
请教一下网络通讯非阻塞巨难的问题
来源: 互联网 发布时间:2015-10-11
本文导语: 在TCP非阻塞状态下,发送数据,要怎么知道发送有没有成功,因为数据只是成功的拷到缓冲区,不知道接收方有没有正确收到,要怎么判断数据已经被接收方成功接收? | 对方成功接收后回传...
在TCP非阻塞状态下,发送数据,要怎么知道发送有没有成功,因为数据只是成功的拷到缓冲区,不知道接收方有没有正确收到,要怎么判断数据已经被接收方成功接收?
|
对方成功接收后回传一个ACK信号,不过这是协议内部定义的,估计访问不了。
建议对方成功接收后通过socket回传一个如“ok”信号。
建议对方成功接收后通过socket回传一个如“ok”信号。
|
非阻塞方式下,需要根据你非阻塞函数返回值判断发送的字节数,发生出去的字节是可以保证被服务器端接受的,
|
呵呵,虽说是TCP,可能会阻塞在你本地TCP/IP Stack的缓存区或对方的缓存区而没有提交到对方的应用。如果不去特别设置该缓存区大小,一般都不是很多,不过大部分系统的TCPIP stack都不会超过64kByte。
在非阻塞方式下,一旦将数据提交到该缓存区,应用就直接返回成功了。
在非阻塞方式下,一旦将数据提交到该缓存区,应用就直接返回成功了。
|
就算是TCP传输,也要自己做判断有就没成功,就是要自己做简单的协议去判断的,
最简单就是让接收方返回一个确认信号。
最简单就是让接收方返回一个确认信号。