⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 00000004.htm

📁 一份很好的linux入门资料
💻 HTM
📖 第 1 页 / 共 5 页
字号:
we&nbsp;do&nbsp;in&nbsp;this&nbsp;document.&nbsp;sa_data&nbsp;contains&nbsp;a&nbsp;destination&nbsp;address&nbsp;and&nbsp;port&nbsp;<BR>number&nbsp;for&nbsp;the&nbsp;socket.&nbsp;This&nbsp;is&nbsp;rather&nbsp;unwieldy.&nbsp;<BR>To&nbsp;deal&nbsp;with&nbsp;struct&nbsp;sockaddr,&nbsp;programmers&nbsp;created&nbsp;a&nbsp;parallel&nbsp;structure:&nbsp;<BR>struct&nbsp;sockaddr_in&nbsp;(&quot;in&quot;&nbsp;for&nbsp;&quot;Internet&quot;.)&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;sockaddr_in&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;short&nbsp;int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sin_family;&nbsp;&nbsp;/*&nbsp;Address&nbsp;family&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;short&nbsp;int&nbsp;sin_port;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Port&nbsp;number&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;in_addr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sin_addr;&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Internet&nbsp;address&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sin_zero[8];&nbsp;/*&nbsp;Same&nbsp;size&nbsp;as&nbsp;struct&nbsp;sockaddr&nbsp;*/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;<BR>This&nbsp;structure&nbsp;makes&nbsp;it&nbsp;easy&nbsp;to&nbsp;reference&nbsp;elements&nbsp;of&nbsp;the&nbsp;socket&nbsp;address.&nbsp;<BR>Note&nbsp;that&nbsp;sin_zero&nbsp;(which&nbsp;is&nbsp;included&nbsp;to&nbsp;pad&nbsp;the&nbsp;structure&nbsp;to&nbsp;the&nbsp;length&nbsp;of&nbsp;<BR>a&nbsp;struct&nbsp;sockaddr)&nbsp;should&nbsp;be&nbsp;set&nbsp;to&nbsp;all&nbsp;zeros&nbsp;with&nbsp;the&nbsp;function&nbsp;bzero()&nbsp;or&nbsp;<BR>memset().&nbsp;Also,&nbsp;and&nbsp;this&nbsp;is&nbsp;the&nbsp;important&nbsp;bit,&nbsp;a&nbsp;pointer&nbsp;to&nbsp;a&nbsp;<BR>struct&nbsp;sockaddr_in&nbsp;can&nbsp;be&nbsp;cast&nbsp;to&nbsp;a&nbsp;pointer&nbsp;to&nbsp;a&nbsp;struct&nbsp;sockaddr&nbsp;and&nbsp;<BR>vice-versa.&nbsp;So&nbsp;even&nbsp;though&nbsp;socket()&nbsp;wants&nbsp;a&nbsp;struct&nbsp;sockaddr&nbsp;*,&nbsp;you&nbsp;can&nbsp;still&nbsp;<BR>&nbsp;<BR>use&nbsp;a&nbsp;struct&nbsp;sockaddr_in&nbsp;and&nbsp;cast&nbsp;it&nbsp;at&nbsp;the&nbsp;last&nbsp;minute!&nbsp;Also,&nbsp;notice&nbsp;that&nbsp;<BR>sin_family&nbsp;corresponds&nbsp;to&nbsp;sa_family&nbsp;in&nbsp;a&nbsp;struct&nbsp;sockaddr&nbsp;and&nbsp;should&nbsp;be&nbsp;set&nbsp;<BR>to&nbsp;&quot;AF_INET&quot;.&nbsp;Finally,&nbsp;the&nbsp;sin_port&nbsp;and&nbsp;sin_addr&nbsp;must&nbsp;be&nbsp;in&nbsp;Network&nbsp;Byte&nbsp;<BR>Order!&nbsp;<BR>&quot;But,&quot;&nbsp;you&nbsp;object,&nbsp;&quot;how&nbsp;can&nbsp;the&nbsp;entire&nbsp;structure,&nbsp;struct&nbsp;in_addr&nbsp;sin_addr,&nbsp;<BR>be&nbsp;in&nbsp;Network&nbsp;Byte&nbsp;Order?&quot;&nbsp;This&nbsp;question&nbsp;requires&nbsp;careful&nbsp;examination&nbsp;of&nbsp;the&nbsp;<BR>&nbsp;<BR>structure&nbsp;struct&nbsp;in_addr,&nbsp;one&nbsp;of&nbsp;the&nbsp;worst&nbsp;unions&nbsp;alive:&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;/*&nbsp;Internet&nbsp;address&nbsp;(a&nbsp;structure&nbsp;for&nbsp;historical&nbsp;reasons)&nbsp;*/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;struct&nbsp;in_addr&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;long&nbsp;s_addr;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;;&nbsp;<BR>Well,&nbsp;it&nbsp;used&nbsp;to&nbsp;be&nbsp;a&nbsp;union,&nbsp;but&nbsp;now&nbsp;those&nbsp;days&nbsp;seem&nbsp;to&nbsp;be&nbsp;gone.&nbsp;Good&nbsp;<BR>riddance.&nbsp;So&nbsp;if&nbsp;you&nbsp;have&nbsp;declared&nbsp;&quot;ina&quot;&nbsp;to&nbsp;be&nbsp;of&nbsp;type&nbsp;struct&nbsp;sockaddr_in,&nbsp;<BR>then&nbsp;&quot;ina.sin_addr.s_addr&quot;&nbsp;references&nbsp;the&nbsp;4&nbsp;byte&nbsp;IP&nbsp;address&nbsp;(in&nbsp;Network&nbsp;Byte&nbsp;<BR>&nbsp;<BR>Order).&nbsp;Note&nbsp;that&nbsp;even&nbsp;if&nbsp;your&nbsp;system&nbsp;still&nbsp;uses&nbsp;the&nbsp;God-awful&nbsp;union&nbsp;for&nbsp;<BR>struct&nbsp;in_addr,&nbsp;you&nbsp;can&nbsp;still&nbsp;reference&nbsp;the&nbsp;4&nbsp;byte&nbsp;IP&nbsp;address&nbsp;in&nbsp;exactly&nbsp;the&nbsp;<BR>&nbsp;<BR>same&nbsp;way&nbsp;as&nbsp;I&nbsp;did&nbsp;above&nbsp;(this&nbsp;due&nbsp;to&nbsp;#defines.)&nbsp;<BR>----------------------------------------------------------------------------&nbsp;<BR>&nbsp;<BR>5.&nbsp;Convert&nbsp;the&nbsp;Natives!&nbsp;<BR>We've&nbsp;now&nbsp;been&nbsp;lead&nbsp;right&nbsp;into&nbsp;the&nbsp;next&nbsp;section.&nbsp;There's&nbsp;been&nbsp;too&nbsp;much&nbsp;talk&nbsp;<BR>about&nbsp;this&nbsp;Network&nbsp;to&nbsp;Host&nbsp;Byte&nbsp;Order&nbsp;conversion--now&nbsp;is&nbsp;the&nbsp;time&nbsp;for&nbsp;<BR>action!&nbsp;<BR>All&nbsp;righty.&nbsp;There&nbsp;are&nbsp;two&nbsp;types&nbsp;that&nbsp;you&nbsp;can&nbsp;convert:&nbsp;short&nbsp;(two&nbsp;bytes)&nbsp;and&nbsp;<BR>long&nbsp;(four&nbsp;bytes).&nbsp;These&nbsp;functions&nbsp;work&nbsp;for&nbsp;the&nbsp;unsigned&nbsp;variations&nbsp;as&nbsp;well.&nbsp;<BR>&nbsp;<BR>Say&nbsp;you&nbsp;want&nbsp;to&nbsp;convert&nbsp;a&nbsp;short&nbsp;from&nbsp;Host&nbsp;Byte&nbsp;Order&nbsp;to&nbsp;Network&nbsp;Byte&nbsp;Order.&nbsp;<BR>Start&nbsp;with&nbsp;&quot;h&quot;&nbsp;for&nbsp;&quot;host&quot;,&nbsp;follow&nbsp;it&nbsp;with&nbsp;&quot;to&quot;,&nbsp;then&nbsp;&quot;n&quot;&nbsp;for&nbsp;&quot;network&quot;,&nbsp;and&nbsp;<BR>&quot;s&quot;&nbsp;for&nbsp;&quot;short&quot;:&nbsp;h-to-n-s,&nbsp;or&nbsp;htons()&nbsp;(read:&nbsp;&quot;Host&nbsp;to&nbsp;Network&nbsp;Short&quot;).&nbsp;<BR>It's&nbsp;almost&nbsp;too&nbsp;easy...&nbsp;<BR>You&nbsp;can&nbsp;use&nbsp;every&nbsp;combination&nbsp;if&nbsp;&quot;n&quot;,&nbsp;&quot;h&quot;,&nbsp;&quot;s&quot;,&nbsp;and&nbsp;&quot;l&quot;&nbsp;you&nbsp;want,&nbsp;not&nbsp;<BR>counting&nbsp;the&nbsp;really&nbsp;stupid&nbsp;ones.&nbsp;For&nbsp;example,&nbsp;there&nbsp;is&nbsp;NOT&nbsp;a&nbsp;stolh()&nbsp;(&quot;Short&nbsp;<BR>&nbsp;<BR>to&nbsp;Long&nbsp;Host&quot;)&nbsp;function--not&nbsp;at&nbsp;this&nbsp;party,&nbsp;anyway.&nbsp;But&nbsp;there&nbsp;are:&nbsp;<BR>&nbsp;&nbsp;&nbsp;*&nbsp;htons()--&quot;Host&nbsp;to&nbsp;Network&nbsp;Short&quot;&nbsp;<BR>&nbsp;&nbsp;&nbsp;*&nbsp;htonl()--&quot;Host&nbsp;to&nbsp;Network&nbsp;Long&quot;&nbsp;<BR>&nbsp;&nbsp;&nbsp;*&nbsp;ntohs()--&quot;Network&nbsp;to&nbsp;Host&nbsp;Short&quot;&nbsp;<BR>&nbsp;&nbsp;&nbsp;*&nbsp;ntohl()--&quot;Network&nbsp;to&nbsp;Host&nbsp;Long&quot;&nbsp;<BR>Now,&nbsp;you&nbsp;may&nbsp;think&nbsp;you're&nbsp;wising&nbsp;up&nbsp;to&nbsp;this.&nbsp;You&nbsp;might&nbsp;think,&nbsp;&quot;What&nbsp;do&nbsp;I&nbsp;do&nbsp;<BR>if&nbsp;I&nbsp;have&nbsp;to&nbsp;change&nbsp;byte&nbsp;order&nbsp;on&nbsp;a&nbsp;char?&quot;&nbsp;Then&nbsp;you&nbsp;might&nbsp;think,&nbsp;&quot;Uh,&nbsp;never&nbsp;<BR>mind.&quot;&nbsp;You&nbsp;might&nbsp;also&nbsp;think&nbsp;that&nbsp;since&nbsp;your&nbsp;68000&nbsp;machine&nbsp;already&nbsp;uses&nbsp;<BR>network&nbsp;byte&nbsp;order,&nbsp;you&nbsp;don't&nbsp;have&nbsp;to&nbsp;call&nbsp;htonl()&nbsp;on&nbsp;your&nbsp;IP&nbsp;addresses.&nbsp;You&nbsp;<BR>&nbsp;<BR>would&nbsp;be&nbsp;right,&nbsp;BUT&nbsp;if&nbsp;you&nbsp;try&nbsp;to&nbsp;port&nbsp;to&nbsp;a&nbsp;machine&nbsp;that&nbsp;has&nbsp;reverse&nbsp;network&nbsp;<BR>&nbsp;<BR>byte&nbsp;order,&nbsp;your&nbsp;program&nbsp;will&nbsp;fail.&nbsp;Be&nbsp;portable!&nbsp;This&nbsp;is&nbsp;a&nbsp;Unix&nbsp;world!&nbsp;<BR>Remember:&nbsp;put&nbsp;your&nbsp;bytes&nbsp;in&nbsp;Network&nbsp;Order&nbsp;before&nbsp;you&nbsp;put&nbsp;them&nbsp;on&nbsp;the&nbsp;<BR>network.&nbsp;<BR>A&nbsp;final&nbsp;point:&nbsp;why&nbsp;do&nbsp;sin_addr&nbsp;and&nbsp;sin_port&nbsp;need&nbsp;to&nbsp;be&nbsp;in&nbsp;Network&nbsp;Byte&nbsp;Order&nbsp;<BR>&nbsp;<BR>in&nbsp;a&nbsp;struct&nbsp;sockaddr_in,&nbsp;but&nbsp;sin_family&nbsp;does&nbsp;not?&nbsp;The&nbsp;answer:&nbsp;sin_addr&nbsp;and&nbsp;<BR>sin_port&nbsp;get&nbsp;encapsulated&nbsp;in&nbsp;the&nbsp;packet&nbsp;at&nbsp;the&nbsp;IP&nbsp;and&nbsp;UDP&nbsp;layers,&nbsp;<BR>respectively.&nbsp;Thus,&nbsp;they&nbsp;must&nbsp;be&nbsp;in&nbsp;Network&nbsp;Byte&nbsp;Order.&nbsp;However,&nbsp;the&nbsp;<BR>sin_family&nbsp;field&nbsp;is&nbsp;only&nbsp;used&nbsp;by&nbsp;the&nbsp;kernel&nbsp;to&nbsp;determine&nbsp;what&nbsp;type&nbsp;of&nbsp;<BR>address&nbsp;the&nbsp;structure&nbsp;contains,&nbsp;so&nbsp;it&nbsp;must&nbsp;be&nbsp;in&nbsp;Host&nbsp;Byte&nbsp;Order.&nbsp;Also,&nbsp;<BR>since&nbsp;sin_family&nbsp;does&nbsp;not&nbsp;get&nbsp;sent&nbsp;out&nbsp;on&nbsp;the&nbsp;network,&nbsp;it&nbsp;can&nbsp;be&nbsp;in&nbsp;Host&nbsp;<BR>Byte&nbsp;Order.&nbsp;<BR>----------------------------------------------------------------------------&nbsp;<BR>&nbsp;<BR>6.&nbsp;IP&nbsp;Addresses&nbsp;and&nbsp;How&nbsp;to&nbsp;Deal&nbsp;With&nbsp;Them&nbsp;<BR>Fortunately&nbsp;for&nbsp;you,&nbsp;there&nbsp;are&nbsp;a&nbsp;bunch&nbsp;of&nbsp;functions&nbsp;that&nbsp;allow&nbsp;you&nbsp;to&nbsp;<BR>manipulate&nbsp;IP&nbsp;addresses.&nbsp;No&nbsp;need&nbsp;to&nbsp;figure&nbsp;them&nbsp;out&nbsp;by&nbsp;hand&nbsp;and&nbsp;stuff&nbsp;them&nbsp;<BR>in&nbsp;a&nbsp;long&nbsp;with&nbsp;the&nbsp;&lt;&lt;&nbsp;operator.&nbsp;<BR>First,&nbsp;let's&nbsp;say&nbsp;you&nbsp;have&nbsp;a&nbsp;struct&nbsp;sockaddr_in&nbsp;ina,&nbsp;and&nbsp;you&nbsp;have&nbsp;an&nbsp;IP&nbsp;<BR>address&nbsp;&quot;132.241.5.10&quot;&nbsp;that&nbsp;you&nbsp;want&nbsp;to&nbsp;store&nbsp;into&nbsp;it.&nbsp;The&nbsp;function&nbsp;you&nbsp;want&nbsp;<BR>&nbsp;<BR>to&nbsp;use,&nbsp;inet_addr(),&nbsp;converts&nbsp;an&nbsp;IP&nbsp;address&nbsp;in&nbsp;numbers-and-dots&nbsp;notation&nbsp;<BR>into&nbsp;an&nbsp;unsigned&nbsp;long.&nbsp;The&nbsp;assignment&nbsp;can&nbsp;be&nbsp;made&nbsp;as&nbsp;follows:&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;ina.sin_addr.s_addr&nbsp;=&nbsp;inet_addr(&quot;132.241.5.10&quot;);&nbsp;<BR>Notice&nbsp;that&nbsp;inet_addr()&nbsp;returns&nbsp;the&nbsp;address&nbsp;in&nbsp;Network&nbsp;Byte&nbsp;Order&nbsp;<BR>already--you&nbsp;don't&nbsp;have&nbsp;to&nbsp;call&nbsp;htonl().&nbsp;Swell!&nbsp;<BR>Now,&nbsp;the&nbsp;above&nbsp;code&nbsp;snippet&nbsp;isn't&nbsp;very&nbsp;robust&nbsp;because&nbsp;there&nbsp;is&nbsp;no&nbsp;error&nbsp;<BR>checking.&nbsp;See,&nbsp;inet_addr()&nbsp;returns&nbsp;-1&nbsp;on&nbsp;error.&nbsp;Remember&nbsp;binary&nbsp;numbers?&nbsp;<BR>(unsigned)-1&nbsp;just&nbsp;happens&nbsp;to&nbsp;correspond&nbsp;to&nbsp;the&nbsp;IP&nbsp;address&nbsp;255.255.255.255!&nbsp;<BR>That's&nbsp;the&nbsp;broadcast&nbsp;address!&nbsp;Wrongo.&nbsp;Remember&nbsp;to&nbsp;do&nbsp;your&nbsp;error&nbsp;checking&nbsp;<BR>properly.&nbsp;<BR>All&nbsp;right,&nbsp;now&nbsp;you&nbsp;can&nbsp;convert&nbsp;string&nbsp;IP&nbsp;addresses&nbsp;to&nbsp;longs.&nbsp;What&nbsp;about&nbsp;the&nbsp;<BR>other&nbsp;way&nbsp;around?&nbsp;What&nbsp;if&nbsp;you&nbsp;have&nbsp;a&nbsp;struct&nbsp;in_addr&nbsp;and&nbsp;you&nbsp;want&nbsp;to&nbsp;print&nbsp;it&nbsp;<BR>&nbsp;<BR>in&nbsp;numbers-and-dots&nbsp;notation?&nbsp;In&nbsp;this&nbsp;case,&nbsp;you'll&nbsp;want&nbsp;to&nbsp;use&nbsp;the&nbsp;function&nbsp;<BR>inet_ntoa()&nbsp;(&quot;ntoa&quot;&nbsp;means&nbsp;&quot;network&nbsp;to&nbsp;ascii&quot;)&nbsp;like&nbsp;this:&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;%s&quot;,inet_ntoa(ina.sin_addr));&nbsp;<BR>That&nbsp;will&nbsp;print&nbsp;the&nbsp;IP&nbsp;address.&nbsp;Note&nbsp;that&nbsp;inet_ntoa()&nbsp;takes&nbsp;a&nbsp;struct&nbsp;in_addr&nbsp;<BR>&nbsp;<BR>as&nbsp;an&nbsp;argument,&nbsp;not&nbsp;a&nbsp;long.&nbsp;Also&nbsp;notice&nbsp;that&nbsp;it&nbsp;returns&nbsp;a&nbsp;pointer&nbsp;to&nbsp;a&nbsp;char.&nbsp;<BR>&nbsp;<BR>This&nbsp;points&nbsp;to&nbsp;a&nbsp;statically&nbsp;stored&nbsp;char&nbsp;array&nbsp;within&nbsp;inet_ntoa()&nbsp;so&nbsp;that&nbsp;<BR>each&nbsp;time&nbsp;you&nbsp;call&nbsp;inet_ntoa()&nbsp;it&nbsp;will&nbsp;overwrite&nbsp;the&nbsp;last&nbsp;IP&nbsp;address&nbsp;you&nbsp;<BR>asked&nbsp;for.&nbsp;For&nbsp;example:&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;*a1,&nbsp;*a2;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;.&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;.&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;a1&nbsp;=&nbsp;inet_ntoa(ina1.sin_addr);&nbsp;&nbsp;/*&nbsp;this&nbsp;is&nbsp;198.92.129.1&nbsp;*/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;a2&nbsp;=&nbsp;inet_ntoa(ina2.sin_addr);&nbsp;&nbsp;/*&nbsp;this&nbsp;is&nbsp;132.241.5.10&nbsp;*/&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;address&nbsp;1:&nbsp;%s&quot;,a1);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;address&nbsp;2:&nbsp;%s&quot;,a2);&nbsp;<BR>will&nbsp;print:&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;address&nbsp;1:&nbsp;132.241.5.10&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;address&nbsp;2:&nbsp;132.241.5.10&nbsp;<BR>If&nbsp;you&nbsp;need&nbsp;to&nbsp;save&nbsp;the&nbsp;address,&nbsp;strcpy()&nbsp;it&nbsp;to&nbsp;your&nbsp;own&nbsp;character&nbsp;array.&nbsp;<BR>That's&nbsp;all&nbsp;on&nbsp;this&nbsp;topic&nbsp;for&nbsp;now.&nbsp;Later,&nbsp;you'll&nbsp;learn&nbsp;to&nbsp;convert&nbsp;a&nbsp;string&nbsp;<BR>like&nbsp;&quot;whitehouse.gov&quot;&nbsp;into&nbsp;its&nbsp;corresponding&nbsp;IP&nbsp;address&nbsp;(see&nbsp;DNS,&nbsp;below.)&nbsp;<BR>----------------------------------------------------------------------------&nbsp;<BR>&nbsp;<BR>7.&nbsp;socket()--Get&nbsp;the&nbsp;File&nbsp;Descriptor!&nbsp;<BR>I&nbsp;guess&nbsp;I&nbsp;can&nbsp;put&nbsp;it&nbsp;off&nbsp;no&nbsp;longer--I&nbsp;have&nbsp;to&nbsp;talk&nbsp;about&nbsp;the&nbsp;socket()&nbsp;system&nbsp;<BR>&nbsp;<BR>call.&nbsp;Here's&nbsp;the&nbsp;breakdown:&nbsp;<BR>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -