关于关闭TCP连接的问题 一个客户端与服务器建立了TCP连接,在客户端关闭连接时,Close() 和 shutdown()两者是否有区别?? 有怎样的区别??? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 shutdownThe shutdown function disables sends or receives on a socket.这个是windows的apiclose是标准库的api,适用于其他io操作 shutdown可以分别关闭读写或者同时关闭读写 如果关闭读,则接受缓冲区的未读出的所有数据都将丢失,以后不会再接受任何数据 如果关闭写,如果输出缓冲区内有数据,则所有的数据将发送出去后将发送一个FIN信号 而close则是关闭该socket,马上发送FIN信号,所有的未完成发送或者接受的数据都将被丢失 对于慢速网络,应该先进行shutdown,然后一定的时间延迟,再close该socket closesocket函数用来关闭一个描述符为s套接字。由于每个进程中都有一个套接字描述符表,表中的每个套接字描述符都对应了一个位于操作系统缓冲区中的套接字数据结构,因此有可能有几个套接字描述符指向同一个套接字数据结构。套接字数据结构中专门有一个字段存放该结构的被引用次数,即有多少个套接字描述符指向该结构。当调用closesocket函数时,操作系统先检查套接字数据结构中的该字段的值,如果为1,就表明只有一个套接字描述符指向它,因此操作系统就先把s在套接字描述符表中对应的那条表项清除,并且释放s对应的套接字数据结构;如果该字段大于1,那么操作系统仅仅清除s在套接字描述符表中的对应表项,并且把s对应的套接字数据结构的引用次数减1。 closesocket函数如果执行成功就返回0,否则返回SOCKET_ERROR。 shutdown():停止 Socket 接收/传送的功能。 格式: int PASCAL FAR shutdown( SOCKET s, int how ); 参数: s Socket 的识别码,how 代表该停止那些动作的标帜 传回值: 成功 - 0 失败 - SOCKET_ERROR (呼叫 WSAGetLastError()可得知原因) 说明: 此函式用来停止 Socket 的後续接收或传送的功能。 若 how 的值为 0,则不再接收资料。 若 how 的值为 1,则不再允许传送资料。 若 how 的值为 2,则不再接收且不再传送资料。 shutdown() 函式并没有将 Socket 关闭,所以该 Socket 所占用之资源必须在呼叫closesocket() 之後才会释放。 打包DirectX开发的程序的问题 问一个关于QQ游戏大厅界面的问题 VC如何控制HTML控件 怎样从线程函数中传递消息到主线程? 请教大侠,如何用程序控制针式打印机退纸?Epson打印机 当使用GDI+的DrawImage向MemoryDC中画图时,为什么总有错误8返回,非常急!!!! 无法示别资源ID CSocket类发送接收丢数据问题 代理服务器的简单工作原理? vc6中用_Worksheet类的saveas函数保存为txt格式时为什么出错? float3 * float4 的结果是什么? 求助:如何做一个流媒体播放器
The shutdown function disables sends or receives on a socket.
这个是windows的api
close是标准库的api,适用于其他io操作
如果关闭读,则接受缓冲区的未读出的所有数据都将丢失,以后不会再接受任何数据
如果关闭写,如果输出缓冲区内有数据,则所有的数据将发送出去后将发送一个FIN信号
而close则是关闭该socket,马上发送FIN信号,所有的未完成发送或者接受的数据都将被丢失
对于慢速网络,应该先进行shutdown,然后一定的时间延迟,再close该socket
closesocket函数如果执行成功就返回0,否则返回SOCKET_ERROR。
shutdown():停止 Socket 接收/传送的功能。
格式: int PASCAL FAR shutdown( SOCKET s, int how );
参数: s Socket 的识别码,how 代表该停止那些动作的标帜
传回值: 成功 - 0
失败 - SOCKET_ERROR (呼叫 WSAGetLastError()可得知原因)
说明: 此函式用来停止 Socket 的後续接收或传送的功能。
若 how 的值为 0,则不再接收资料。
若 how 的值为 1,则不再允许传送资料。
若 how 的值为 2,则不再接收且不再传送资料。
shutdown() 函式并没有将 Socket 关闭,所以该 Socket 所占用之资源必须在呼叫closesocket() 之後才会释放。