日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

深入理解阻塞socket和非阻塞socket

發布時間:2025/6/15 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深入理解阻塞socket和非阻塞socket 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

什么是阻塞socket,什么是非阻塞socket。對于這個問題,我們要先弄清什么是阻塞/非阻塞。阻塞與非阻塞是對一個文件描述符指定的文件或設備的兩種工作方式。?阻塞的意思是指,當試圖對該文件描述符進行讀寫時,如果當時沒有東西可讀或者暫時不可寫,程序就進入等待狀態,直到有東西可讀或者可寫為止。?非阻塞的意思是,當沒有東西可讀或者不可寫時,讀寫函數就馬上返回,而不會等待。


現在來理解什么是阻塞socket,什么是非阻塞socket。每個通過socket()函數創建的socket,本質就是一個文件描述符,所以對該文件描述符的IO操作方式不同,就有了阻塞socket和非阻塞socket。?那是不是說阻塞socket下的所以socket api函數都是阻塞的呢,如果你還不能正確的回答這個問題,說明上面簡短的說明并沒有讓你真正的明白什么是阻塞socket和非阻塞socket。這個問題的答案是否定的,為什么是否定的,因為并不是每個socket的api都會涉及到對文件描述符的IO操作。

?

?這里我列舉了,哪些socket api會阻塞:

accept,connect,recv(recvfrom),send(sendto),closesocket,select(poll或epoll)

1)accept在阻塞模式下,沒有新連接時,線程會進入睡眠狀態;非阻塞模式下,沒有新連接時,立即返回WOULDBLOCK錯誤。

2)connect在阻塞模式下,僅TCP連接建立成功或出錯時才返回,分幾種具體的情況,這里不再敘述;非阻塞模式下,該函數會立即返回INPROCESS錯誤(需用select檢測該連接是否建立成功)

3)recv/recvfrom/send/sendto很好理解,因為這兩類函數讀寫socket文件描述符的接收/發送緩沖區。?

4)?select/poll/epoll并不是真正意義上的阻塞,它們的阻塞是由于它們最后一個timeout參數決定的,timeout大于0時,它們會一直等待直到超時才退出(相等于阻塞了吧,^_^),而timeout=-1即永遠等待

總結

以上是生活随笔為你收集整理的深入理解阻塞socket和非阻塞socket的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。