您好,欢迎来到年旅网。
搜索
您的当前位置:首页【Socket】shutdown之后需不需要recv再closeSocket

【Socket】shutdown之后需不需要recv再closeSocket

来源:年旅网

在学习中发现,教程在linux的服务端代码实现中,最后部分的处理如下

 	shutdown(clientSock, SHUT_WR);
 	fclose(file);
 	close(clientSock);
 	close(sock);
 
	return 0;

但是windows的服务端却多了一句recv(clntSock, buffer, BUF_SIZE, 0);

	shutdown(clntSock, SD_SEND);  //文件读取完毕,断开输出流,向客户端发送FIN包
    recv(clntSock, buffer, BUF_SIZE, 0);  //阻塞,等待客户端接收完毕
 
    fclose(fp);
    closesocket(clntSock);
    closesocket(servSock);
    WSACleanup();
 
    system("pause");
    return 0;

这里其实是没有必要的,这一句recv阻塞后面的代码,直到客户端接受完整个文件发回 FIN 之后才会继续执行
那这句话用途在哪呢。或者说作者为啥爱写这一句?

如果是客户端和服务端都会收发消息时,就可以在shutdown之后跟上recv来接受剩下的消息,只要客户端没有调用closeSocket/Shutdown发回FIN,recv都会阻塞代码,直到接受完所有消息后再调用closeSocket断开连接。

ps:关于为什么shutdown大家教程看的过程中就知道了,这里只探讨recv。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- oldu.cn 版权所有 浙ICP备2024123271号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务