[問題] 使用socket的問題 in Concurrent TCP S …

看板C_and_CPP (C/C++)作者 (homestay)時間16年前 (2010/04/01 23:28), 編輯推噓0(003)
留言3則, 2人參與, 最新討論串1/1
遇到的問題:目前照著書上的觀念,在fork後若是進入父程序則要記得關閉accept所 建構出的指標,而在子程序要關閉socket物件,如下: ................ ................(前面略) for(;;){ int conn; conn=accept(sockfd,(struct sockaddr *)&addr_cln,&sLen); ....... if(fork()>0){ close(conn); continue; } ........ close(sockfd); .......... } 可是經過測試,照上面的方式Server會在close時(推測試socket)令accept發生Error 註明:有傳輸成功 ,但是在Server端會發出accept Error 然而我將close(sockfd);刪除後,Server/Client可以正常執行,而且沒Error 且書上一直強調父程序關閉connected socket(也就是利用accept建立的) 然後在子程序中關閉Listening socket(Server接收Client連線要求的socket) 雖然書上有提到說socket會在程序結束自動關掉?但是要養成自己開自己關的習慣 為何我照上面的方法會錯勒 = =? 希望版友幫個忙~感謝~ 新手上路問題多多T.T 希望得到的正確結果:是否正如書上的觀念? 而這段程式怎麼又會錯在accept呢 還是說這樣是正常的? 程式跑出來的錯誤結果:accept Error 開發平台:g++ in Linux (in VirtualBox) 有問題的code:在問題裡面XD ,大致上和教材課本的Concurrent TCP echo一樣 再次感謝ˊˋ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.40.147.118 ※ 編輯: homestay 來自: 114.40.147.118 (04/01 23:33) ※ 編輯: homestay 來自: 114.40.147.118 (04/01 23:40) ※ 編輯: homestay 來自: 114.40.147.118 (04/01 23:40)

04/02 00:03, , 1F
bind的socket 怎麼會在每次迴圈裡close?
04/02 00:03, 1F

04/02 00:28, , 2F
XD好像找到問題了 我在for尾巴加return 0;解決子程序跑fo
04/02 00:28, 2F

04/02 00:28, , 3F
for的狀況= =
04/02 00:28, 3F
文章代碼(AID): #1BjBk5jh (C_and_CPP)
文章代碼(AID): #1BjBk5jh (C_and_CPP)