其實(shí),這就是在調(diào)用這個(gè)函隱枯數(shù)灶脊洞,等野脊同于:
民豐網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián)公司,民豐網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為民豐成百上千提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)公司要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的民豐做網(wǎng)站的公司定做!
例如,
運(yùn)行結(jié)果:
又如:
運(yùn)行結(jié)果一樣的。
如何迅山優(yōu)雅地打一個(gè)有效借條
借條可以署名 “優(yōu)雅的借條”
如何優(yōu)雅地打張更具法律效力的借條
《借條》的正規(guī)寫法,沒有什么優(yōu)雅或高端的之說。一般認(rèn)為,借條的書寫應(yīng)當(dāng)規(guī)范、嚴(yán)謹(jǐn),關(guān)鍵的要素比如貸款人、借款人、借款金額、還款期限、有無(wú)利息、借款日期等,必須齊全、真實(shí)、準(zhǔn)確、無(wú)涂改、雙方當(dāng)事人無(wú)異議。對(duì)借款人、貸款人的名字要與其身份證上的姓名相符,要避免使用張叔叔、李伯伯、王老弟、趙大哥等昵稱或代號(hào),防止以后發(fā)生誤會(huì)或爭(zhēng)議。
如何優(yōu)雅地關(guān)閉一個(gè)socket
先判斷winsocket的狀態(tài)
如果是 關(guān)閉 則忽略
如果是打開,則使用關(guān)閉動(dòng)作去關(guān)閉它即可
1. 關(guān)閉Socket時(shí)究竟做了什么
關(guān)閉socket分為主動(dòng)關(guān)閉(Active closure)和被動(dòng)關(guān)閉(Passive closure)兩種情況。前者是指有本地主機(jī)主動(dòng)發(fā)起的關(guān)閉;而后者則是指本地主機(jī)檢測(cè)到遠(yuǎn)程主機(jī)發(fā)起關(guān)閉之后,作出回應(yīng),從而關(guān)閉整個(gè)連接。
其狀態(tài)圖如下圖所示:
起初每個(gè)socket都是CLOSED狀態(tài),當(dāng)客戶端初使化一個(gè)連接,他鋒鬧發(fā)送一個(gè)SYN包到服務(wù)器,客戶端進(jìn)入SYN_SENT狀態(tài)。
服務(wù)器接收到SYN包,反饋銀昌罩一個(gè)SYN-ACK包,客戶端接收后返饋一個(gè)ACK包客戶端變成ESTABLISHED狀態(tài),如果長(zhǎng)時(shí)間沒收到SYN-ACK包,客戶端超時(shí)進(jìn)入CLOSED狀態(tài)。
當(dāng)服務(wù)器綁定并監(jiān)聽某一端口時(shí),socket的狀態(tài)是LISTEN,當(dāng)客戶企圖建立連接時(shí),服務(wù)器收到一個(gè)SYN包,并反饋SYN-ACK包。服務(wù)器狀態(tài)變成SYN_RCVD,當(dāng)客戶端發(fā)送一個(gè)ACK包時(shí),服務(wù)器socket變成ESTABLISHED狀態(tài)。
當(dāng)一個(gè)程序在ESTABLISHED狀態(tài)時(shí)有兩種圖徑關(guān)閉它, 第一是主動(dòng)關(guān)閉,第二是被動(dòng)關(guān)閉。如果你要主動(dòng)關(guān)閉的話,發(fā)送一個(gè)FIN包。當(dāng)你的程序closesocket或者shutdown(標(biāo)記),你的程序發(fā)送一個(gè)FIN包到peer,你的socket變成FIN_WAIT_1狀態(tài)。peer反饋一個(gè)ACK包,你的socket進(jìn)入FIN_WAIT_2狀態(tài)。如果peer也在關(guān)閉連接,那么它將發(fā)送一個(gè)FIN包到你的電腦,你反饋一個(gè)ACK包,并轉(zhuǎn)成TIME_WAIT狀態(tài)。
TIME_WAIT狀態(tài)又號(hào)2MSL等待狀態(tài)。MSL意思是最大段生命周期(Maximum Segment Lifetime)表明一個(gè)包存在于網(wǎng)絡(luò)上到被丟棄之間的時(shí)間。每個(gè)IP包有一個(gè)TTL(time_to_live),當(dāng)它減到0時(shí)則包被丟棄。每個(gè)路由器使TTL減一并且傳送該包。當(dāng)一個(gè)程序進(jìn)入TIME_WAIT狀態(tài)時(shí),他有2個(gè)MSL的時(shí)間,這個(gè)充許TCP重發(fā)最后的ACK,萬(wàn)一最后的ACK丟失了,使得FIN被重新傳輸。在2MSL等待狀態(tài)完成后,socket進(jìn)入CLOSED狀態(tài)。
被動(dòng)關(guān)閉:當(dāng)程序收到一個(gè)FIN包從peer,并反饋一個(gè)ACK包,于是程序的socket轉(zhuǎn)入CLOSE_WAIT狀態(tài)。因?yàn)閜eer已經(jīng)關(guān)閉了,所以不能發(fā)任何消息了。但程序還可以。要關(guān)閉連接,程序自已發(fā)送給自已FIN,使程序的TCP socket狀態(tài)變成LAST_ACK狀態(tài),當(dāng)程序從peer收到ACK包時(shí),程序進(jìn)入CLOSED狀態(tài)。
2. Winsock2 API中的相關(guān)函數(shù)
先當(dāng)然是查MSDN,看到winsocks2 API中的相關(guān)函數(shù)有:closesocket,shutdown,WSASendDisconnect. 我大致說一下,具體詳細(xì)的資料還請(qǐng)自行查MSDN.
int closesocket( SOCKET s)的作用是關(guān)閉指定的socket,并且回收其所有的資源。
int shutdown( SOCKET s, int how)則是禁止在指定的socket s上禁止進(jìn)行由how指定的操作,但并不對(duì)資源進(jìn)行回收,shutdown之后而closesocket之前s還不能再次connect或者WSAConnect.
int WSASendDisconnect( SOCKET s, LPWSABUF lpOutboundDisconnectData)則和shutdown基本類似,稍有不同的就是WSASendDisconnect函數(shù)多了一個(gè)lpOutboundDisconnectData參數(shù),可以允許發(fā)送“斷開數(shù)據(jù)”(disconnect data).但MSDN上寫了“The native implementation of TCP/IP on Windows does not support disconnect data.”,所以一般我們就用shutdown函數(shù)就行了。
3. Socket的優(yōu)雅關(guān)閉
在MSDN中對(duì)shutdown函數(shù)中的Remarks部分有下面一段話,指出了如何進(jìn)行一次優(yōu)雅的slcket關(guān)閉:
To assure that all data is sent and received on a connected socket before it is closed, an application should use shutdown to close connection before calling closesocket. For example, to initiate a graceful disconnect:
Call WSAAsyncSelect to register for FD_CLOSE notification.
Call shutdown with how=SD_SEND.
When FD_CLOSE received, call recv until zero returned, or SOCKET_ERROR.
Call closesocket.
closesocket的行為也是隨setsockopt()中參數(shù)的不同而有不同的表現(xiàn),這里影響它的行為的主要就是那個(gè)linger結(jié)構(gòu)。
SO_DONTLINGER 若為真,則SO_LINGER選項(xiàng)被禁止。
SO_LINGER 延遲關(guān)閉連接 struct linger
上面這兩個(gè)選項(xiàng)影響close行為
選項(xiàng) 間隔 關(guān)閉方式 等待關(guān)閉與否
SO_DONTLINGER 不關(guān)心 優(yōu)雅 否
SO_LINGER 零 強(qiáng)制 否
SO_LINGER 非零 優(yōu)雅 是
若設(shè)置了SO_LINGER(亦即linger結(jié)構(gòu)中的l_onoff域設(shè)為非零),并設(shè)置了零超時(shí)間隔,則closesocket()不被阻塞立即執(zhí)行,不論是否有排隊(duì)數(shù)據(jù)未發(fā)送或未被確認(rèn)。這種關(guān)閉方式稱為“強(qiáng)制”或“失效”關(guān)閉,因?yàn)樘捉涌诘奶撾娐妨⒓幢粡?fù)位,且丟失了未發(fā)送的數(shù)據(jù)。在遠(yuǎn)端的recv()調(diào)用將以WSAECONNRESET出錯(cuò)。
若設(shè)置了SO_LINGER并確定了非零的超時(shí)間隔,則closesocket()調(diào)用阻塞進(jìn)程,直到所剩數(shù)據(jù)發(fā)送完畢或超時(shí)。這種關(guān)閉稱為“優(yōu)雅的”關(guān)閉。請(qǐng)注意如果套接口置為非阻塞且SO_LINGER設(shè)為非零超時(shí),則closesocket()調(diào)用將以WSAEWOULDBLOCK錯(cuò)誤返回。
若在一個(gè)流類套接口上設(shè)置了SO_DONTLINGER(也就是說將linger結(jié)構(gòu)的l_onoff域設(shè)為零),則closesocket()調(diào)用立即返回。但是,如果可能,排隊(duì)的數(shù)據(jù)將在套接口關(guān)閉前發(fā)送。請(qǐng)注意,在這種情況下WINDOWS套接口實(shí)現(xiàn)將在一段不確定的時(shí)間內(nèi)保留套接口以及其他資源,這對(duì)于想用所以套接口的應(yīng)用程序來(lái)說有一定影響。
所以一般來(lái)說,不應(yīng)該把linger設(shè)置為SO_LINGER 并且設(shè)置timeout為0,這樣的話,當(dāng)本地主機(jī)調(diào)用closesocket時(shí)將會(huì)造成一個(gè)“強(qiáng)制”或“失效”的非優(yōu)雅關(guān)閉??梢愿鶕?jù)實(shí)際情況設(shè)置為另外兩種情況。
如何優(yōu)雅地關(guān)閉一個(gè)Socket
輕輕地 *** 去不要太用力 慢慢的取出來(lái)不要太心急(絕對(duì)不污)
污者不留名,留名不污者
如何優(yōu)雅地寫一個(gè) Mesos Framework
go語(yǔ)言Go語(yǔ)言是谷歌2009年發(fā)布的第二款開源編程語(yǔ)言。Go語(yǔ)言專門針對(duì)多處理器系統(tǒng)應(yīng)用程序的編程進(jìn)行了優(yōu)化,使用Go編譯的程序可以媲美C或C++代碼的速度,而且更加安全、支持并行進(jìn)程。北京時(shí)間2010年1月10日,Go語(yǔ)言摘得了TIOBE公布的2009年年度大獎(jiǎng)。
Marathon:
這個(gè)是mesosphere公司開源的基于Mesos的通用框架,主要是用來(lái)執(zhí)行長(zhǎng)期任務(wù),比如web服務(wù)、db服務(wù)等。見到一個(gè)比方,覺得很貼切“marathon好比集群的init.d,需要確保其上的服務(wù)始終運(yùn)行著”。當(dāng)然marathon也執(zhí)行運(yùn)行其他框架比如hadoop。
他的主要優(yōu)勢(shì)在于: 提供了完整的REST API 以及多語(yǔ)言的CLI實(shí)現(xiàn)如python、java、ruby等。同時(shí)也提供了webUI。并且貌似國(guó)內(nèi)有企業(yè)已經(jīng)在用該框架了。我當(dāng)前所在的公司就是選擇的基于Marathon做的自己的SaaS服務(wù)。
Marathon有幾個(gè)比較主要的概念:
約束條件:Marathon支持通過“約束條件”來(lái)限制AP
如何優(yōu)雅地有效用完一本筆記本
有錢的話。。買一個(gè)3w的準(zhǔn)系統(tǒng)。。。然后用兩年。。然后低價(jià)賣出去。。就是這樣的。。。這樣的話最好。。。
如何優(yōu)雅地使用 Vim
裝逼不可取,還不如多看點(diǎn)書,推薦kindle去看書提升自我。
kindle特別適合看小說 看英文版本的書籍,體驗(yàn)超級(jí)給力 ,對(duì)眼睛的傷害可以說很低,看久了也不疲勞, 待機(jī)也不錯(cuò) 手感也很棒,個(gè)人推薦KPW3,日版才600多,問日版國(guó)內(nèi)能不能用,回答是肯定的。亞馬遜資源也是很豐富的,但是kindle對(duì)PDF的書籍支持的很不好。
kindle原系統(tǒng)支持azw、pdf、mobi、prc、txt格式。其中mobi、azw和prc格式支持最為優(yōu)秀。 PDF如果是掃描版的,因?yàn)椴皇菫?寸量身定做的,所以,顯示會(huì)不太清晰,或者由于本身掃描效果就不太好,所以會(huì)不太清晰。如果是字太小,原系統(tǒng)可以考慮局部放大,多看系統(tǒng)下可以用智能切邊功能。 txt格式支持不是太好,有可能會(huì)出現(xiàn)亂碼或者翻頁(yè)有問題。把txt格式編碼另存為UTF-8的編碼的效果會(huì)好點(diǎn)(在電腦中打開一個(gè)txt文件,點(diǎn)擊文件→另存為→編碼選擇UTF-8→保存),但是建議最好是轉(zhuǎn)換成mobi。
如何優(yōu)雅地使用 Windows
軟件正版,桌面干凈,花錢提配置,掌握基本的電腦使用及設(shè)置(擺脫衛(wèi)士和管家)技巧即可。
閉包
閉包(closure)是計(jì)算機(jī)編程領(lǐng)域的專業(yè)名詞,指可以包含自由(未綁定到特定對(duì)象)變量的代碼塊,子函數(shù)可以使用父函數(shù)中的局部變量。閉包源于要執(zhí)行的代碼塊和為自由變量提供綁定的計(jì)算環(huán)境(作陵顫用域)兩者的結(jié)合,Scala、Scheme、Common Lisp、Smalltalk、Groovy、JavaScript、Ruby、 Python、Lua、objective c 以及Java(Java8及以上)等語(yǔ)言中都能找到對(duì)閉包不同程度的支持。
本質(zhì)
集合 S 是閉集當(dāng)且僅當(dāng) Cl(S)=S(這里的cl即closure,閉包)。特別的,空集的閉包是空集,X 的閉包是 X。集合的交集的閉包總是集合的閉包的交集的子集(不一定是真子集)。有限多個(gè)集合的并集的閉包和這些集合的閉包的并集相等;零個(gè)集合的并集為空集,所以這個(gè)命題包含了前面的空集的閉包的特殊情況。無(wú)限多個(gè)集合的并集的閉包不一定等于這些集合的閉包的并集,但前者一定是后者的父集。
若 A 為包含 S 的 X 的子空間悔汪帶,則 S 在 A 中計(jì)算得到的閉包等于 A 和 S 在 X 中計(jì)算得到的閉包(Cl_A(S) = A ∩ Cl_X(S))的交集。特別的,S在 A 中是稠密的,當(dāng)且僅當(dāng) A 是 Cl_X(S) 的子集。
度量空間中的閉包
對(duì)歐幾里德空間的子集 S,x 是 S 的閉包點(diǎn),若所有以 x 為中心的開球都包含 S 的點(diǎn)(這個(gè)點(diǎn)也可以是 x)。
這個(gè)定義可以推廣到度量空間 X 的任意子集 S。具體地說,對(duì)具有度量 d 的度量空間 X,x 是 S 的閉包點(diǎn),若對(duì)所有 r0,存在 y 屬于 S,使得距離 d(x,y)r(同樣的,可以是 x = y)。另一種說法碧蘆可以是,x 是 S 的閉包點(diǎn),若距離 d(x,S) := inf{d(x,s) : s 屬于 S} = 0(這里 inf 表示下確界)。
這個(gè)定義也可以推廣到拓?fù)淇臻g,只需要用鄰域替代“開球”。設(shè) S 是拓?fù)淇臻g X 的子集,則 x 是 S 的閉包點(diǎn),若所有 x 鄰域都包含 S 的點(diǎn)。注意,這個(gè)定義并不要求鄰域是開的。