send 后马上关闭socket,数据能正常发送出去吗

不老小孩 2007-07-17 11:19:18
在服务器端我想做成回应了客户端的数据就关闭SOCKET,
...
send(...);
closesocket(...)
这样做行吗?
别笑我,我是新手。
...全文
563 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
wxw13637906414 2012-07-09
  • 打赏
  • 举报
回复
5楼说得对,通过设置参数去控制的
lianglp 2007-07-20
  • 打赏
  • 举报
回复
调用shutdown可以关闭,以保证发送完成,TCP/IP协议会保证这事情。
fox1999 2007-07-20
  • 打赏
  • 举报
回复
最好 sleep 一下,我試的就有點問題
僵哥 2007-07-19
  • 打赏
  • 举报
回复
如果采用blocking则send返回时数据已经发送,是可以关闭的,但是在closesocket前最好先shutdown.
loverx 2007-07-18
  • 打赏
  • 举报
回复
send will failed with return value -1,you can retrieve more information by calling WSAGetLastErorr()
garasmc 2007-07-18
  • 打赏
  • 举报
回复
借地方再问个问题哈.
如果客户端send(..)后,服务器接收到,然后closesocket了,同时客户端又send了数据.
那么此同发送的数据,客户端这边会显示成功吗?
章月庭 2007-07-18
  • 打赏
  • 举报
回复
还有,如果你用的是socket API,可以通过Socket close 返回,WSAGetLastError来判断是不是正在有数据通讯的.参见MSDN closesocket()
mfc168 2007-07-18
  • 打赏
  • 举报
回复
如果设置了延时,则有可能不丢数据
//延时设置
linger m_sLinger;

m_sLinger.l_onoff = 1; // (在closesocket()调用,但是还有数据没发送完毕的时候容许逗留)

m_sLinger.l_linger = 0; // (容许逗留的时间为0秒)

setsockopt(sockConnected,

SOL_SOCKET,

SO_LINGER,

(const char*)&m_sLinger,

sizeof(linger));
WizardK 2007-07-18
  • 打赏
  • 举报
回复
发送完后需要自己等待一段时间以保证发送完成
loverx 2007-07-18
  • 打赏
  • 举报
回复
NO,The data may lost

The best method is to set the linger time,it ensures the data was sent succeedly
and The sleep function may be ok,but it it not the standard method
HF_99 2007-07-18
  • 打赏
  • 举报
回复
好象不能马上就关闭SOCKET,最好Sleep()一段时间再关闭
Avoid 2007-07-17
  • 打赏
  • 举报
回复
没问题

18,363

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧