[問題] BSD Socket函式第二/三個參數的意義為何

看板C_and_CPP作者 (iSuck)時間14年前 (2010/03/22 21:19), 編輯推噓2(209)
留言11則, 5人參與, 最新討論串1/2 (看更多)
遇到的問題: (題意請描述清楚) socket函式中我有看到有人這樣寫 int socket = 0; sock = socket(AF_INET, SOCK_STREAM, 0); ^^^^^ 這裡 但也有人這樣寫 struct protoent* ptr_protoent = 0; ptr_protoent = getprotobyname("tcp"); sock = socket(AF_INET, SOCK_STREAM, ptr_protoent->p_proto); 我的問題是:差別在哪? 我能理解socket本身不止是給TCP/IP用的,但我不能理解明明在第二個參數已經寫好了 為甚麼還要再寫一次?為甚麼寫0也行? man socket我每個字都看得懂,但完全不知道他在講甚麼。可不可以用簡單一點的說法 告訴我? 以上,還請各位先進不吝指教..... 開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux) BSD socket(FreeBSD 8-release) -- 「老頭滾動條」 猜一遊戲名稱 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.134.115.251 ※ 編輯: doomleika 來自: 140.134.115.251 (03/22 21:22)

03/22 21:31, , 1F
上古捲軸
03/22 21:31, 1F

03/22 23:25, , 2F
03/22 23:25, 2F

03/22 23:30, , 3F
man不就寫了那是protocol number。BSD也有/etc/protocols吧
03/22 23:30, 3F

03/22 23:43, , 4F
一般低階socket不需指明協定參數(int protocol)
03/22 23:43, 4F

03/22 23:43, , 5F
最上方的寫法是比較容易看得懂的寫法。
03/22 23:43, 5F

03/22 23:45, , 6F
所以基本上只需要前兩個參數指明即可,protocol = 0
03/22 23:45, 6F

03/22 23:48, , 7F
你要指定協定參數也可以,MSDN有寫明其用途,但是…
03/22 23:48, 7F

03/22 23:49, , 8F
建議最好與BSD函式庫做比對或對照,不見得完全相同。
03/22 23:49, 8F

03/23 02:04, , 9F
火鳳凰
03/23 02:04, 9F

03/23 04:05, , 10F
謝謝blexx與johnhmj兩位版友,看來我是把SOCK_STREAM
03/23 04:05, 10F

03/23 04:05, , 11F
SOCK_DGRAM與TCP/UDP搞混了
03/23 04:05, 11F
文章代碼(AID): #1Bfsvt6j (C_and_CPP)
文章代碼(AID): #1Bfsvt6j (C_and_CPP)