亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 5082 | 回復: 4
打印 上一主題 下一主題

[Linux] 關于 “socket 阻塞模式時,sendto 系統(tǒng)調用的行為” 的疑惑 [復制鏈接]

論壇徽章:
0
跳轉到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2014-10-29 22:09 |只看該作者 |倒序瀏覽
本帖最后由 himrpei 于 2014-10-29 22:11 編輯

疑惑一:用 socket 系統(tǒng)調用創(chuàng)建的 socket 默認就是阻塞模式吧?


疑惑二:
man sendto 看到關于“阻塞”的描述如下:
When  the  message  does not fit into the send buffer of the socket, send() normally blocks, unless the socket has been placed in nonblocking I/O mode.  In nonblocking mode it would fail with the error EAGAIN  or  EWOULDBLOCK in this case.

根據(jù)如上描述,我這樣做:
用 setsockopt 將創(chuàng)建的 socket 的 send buffer 設置為一個較小的值,比如 2050 。然后調用 sendto 通過這個 socket 發(fā)數(shù)據(jù),數(shù)據(jù)的大小大于 send buffer 的值,比如 5000 。
本來想著,如果 socket 是阻塞模式,調用 sendto 進程應該卡在那不動才對。誰知程序直接報錯返回,將 errno 設置為:ENOBUFS 。

man sendto 關于 ENOBUFS 的描述為:
The  output  queue  for  a network interface was full.  This generally indicates that the interface has stopped sending, but may be caused by transient congestion.  (Normally, this does not occur  in  Linux. Packets are just silently dropped when a device queue overflows.)

我的疑惑是,對于 sendto 來說,阻塞的含義到底是什么? “The  output  queue  for  a network interface was full” 時為什么沒有發(fā)生阻塞,在 socket 設為阻塞模式的時候?

求哥哥、姐姐、大神、大師們解答下我的疑惑。不勝感激!

論壇徽章:
0
2 [報告]
發(fā)表于 2014-10-30 05:04 |只看該作者
sendto這些函數(shù)應該是立刻返回的吧,recv阻塞的話就是會一直掛住等待接收完畢,否則一直掛住。不知道理解對不對。。
所以經?慈藭_一個線程用來recv,不過很少說開一個單獨線程來send的。

論壇徽章:
0
3 [報告]
發(fā)表于 2014-10-30 10:11 |只看該作者
回復 2# Hugo801122

但是我看到 man 手冊里對關于 sendto 的阻塞描述,sendto 也有阻塞這一說。
recv 的阻塞指的是當接收 buffer 里沒有數(shù)據(jù)時卡在那里,直到有數(shù)據(jù)到來。

或許我真不應該考慮 sendto 的阻塞。

   

論壇徽章:
0
4 [報告]
發(fā)表于 2014-11-03 16:23 |只看該作者
套接字默認是阻塞的。

TCP有真正意義上的發(fā)送緩存,內核從應用進程的緩沖區(qū)復制數(shù)據(jù)到套接字的發(fā)送緩沖區(qū),如果發(fā)送緩沖區(qū)沒有空間,并且是阻塞套接字,那么進程將被阻塞直到有空間,
因為UDP套接字不存在真正的發(fā)送緩沖區(qū),內核只是復制應該進程數(shù)據(jù),并把它沿協(xié)議棧冠以UDP首部和IP首部.所以不會阻塞。
從你的man sendto中也可以看到,文中只提了是send函數(shù)會阻塞,而不是sendto。通常send用于TCP,sendto用于UDP。

回復 1# himrpei


   

論壇徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46處女座
日期:2013-10-24 14:25:01酉雞
日期:2014-04-07 11:54:15
5 [報告]
發(fā)表于 2014-11-05 10:28 |只看該作者
tcp不是send么。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉載本站內容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP