小弟有個 socket 程式在收封包時會卡住的問題,想請問大家,
程式片段 ==>
01: FD_ZERO(&readList);
02: FD_SET(udpSd, &readList);
03:
04: rc = select(maxfd1, &readList, NULL, NULL, wait_time, 0);
05: if (rc > 0) {
06: if (FD_ISSET(udpSd, &readList))
07: {
08: cnt = recvfrom(udpSd, udpBuf, SZ_UDP_BUF, 0, &from_addr, &from_len);
09: if (cnt > 0) {
10: .....
11: }
12: }
13: ...
14: }
此片段是某個 thread 會執行到的一段程式碼。
在執行時會卡在第8行,無法從 recvfrom 回來。
雖然在第8行,給 recvfrom 的 flag 是 0,表示是 blocked 的 socket,
然透過第4行的 select() 叫用,
應該是不會讓 recvfrom 因收不到 data 而卡住才對。
請教大家,發生 recvfrom 卡住的狀況其可能原因為何呢 ?
----
ps: 試過第8行的 flag 指定為 nonblocked 的話,就不會卡住,
但小弟想追查為何會卡住。
----
--
程式片段 ==>
01: FD_ZERO(&readList);
02: FD_SET(udpSd, &readList);
03:
04: rc = select(maxfd1, &readList, NULL, NULL, wait_time, 0);
05: if (rc > 0) {
06: if (FD_ISSET(udpSd, &readList))
07: {
08: cnt = recvfrom(udpSd, udpBuf, SZ_UDP_BUF, 0, &from_addr, &from_len);
09: if (cnt > 0) {
10: .....
11: }
12: }
13: ...
14: }
此片段是某個 thread 會執行到的一段程式碼。
在執行時會卡在第8行,無法從 recvfrom 回來。
雖然在第8行,給 recvfrom 的 flag 是 0,表示是 blocked 的 socket,
然透過第4行的 select() 叫用,
應該是不會讓 recvfrom 因收不到 data 而卡住才對。
請教大家,發生 recvfrom 卡住的狀況其可能原因為何呢 ?
----
ps: 試過第8行的 flag 指定為 nonblocked 的話,就不會卡住,
但小弟想追查為何會卡住。
----
--
All Comments