免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營的一線實(shí)戰(zhàn)洞察。

Linux socket系統(tǒng)調(diào)用深度解析:從bind到close的內(nèi)核級(jí)原理

Linux socket系統(tǒng)調(diào)用深度解析:從bind到close的內(nèi)核級(jí)原理 1. 為什么今天還要手寫 socket——當(dāng)現(xiàn)代框架遮蔽了網(wǎng)絡(luò)通信的底層真相“現(xiàn)在誰還手寫 socket”這是我在某次技術(shù)分享后被問得最多的問題。臺(tái)下坐著的大多是剛從 Spring Boot、FastAPI 或 Node.js 項(xiàng)目里走出來的開發(fā)者他們習(xí)慣用幾行注解或一個(gè)app.get()就完成接口開發(fā)對(duì)bind()的返回值為何是 int、listen()的第二個(gè)參數(shù)究竟控制什么、accept()返回的新 socket 和原 socket 到底有何本質(zhì)區(qū)別幾乎從未深究過。但就在上個(gè)月某公司一個(gè)高并發(fā) IM 網(wǎng)關(guān)突然在凌晨三點(diǎn)開始大量連接超時(shí)監(jiān)控顯示ESTABLISHED連接數(shù)卡在 1021 不再增長——運(yùn)維查了一夜最后發(fā)現(xiàn)是listen()的 backlog 參數(shù)被硬編碼為 1024而內(nèi)核實(shí)際somaxconn值被調(diào)低至 1024導(dǎo)致新連接在隊(duì)列滿后直接被丟棄SYN 包石沉大海。沒人想到問題根源竟藏在一行被忽略二十年的 C 函數(shù)調(diào)用里。這正是我堅(jiān)持重講 socket 接口的根本原因現(xiàn)代框架不是替代了 socket而是封裝了它而所有封裝的裂縫最終都會(huì)在高負(fù)載、低延遲、異常網(wǎng)絡(luò)等真實(shí)生產(chǎn)場景中撕開。你不需要每天寫socket()但必須清楚socket()創(chuàng)建的 fd 在內(nèi)核中觸發(fā)了哪些數(shù)據(jù)結(jié)構(gòu)初始化你不必手?jǐn)] epoll但得明白epoll_ctl()的EPOLL_CTL_ADD操作背后內(nèi)核如何將 fd 關(guān)聯(lián)到紅黑樹與就緒鏈表。這不是懷舊而是建立“可控感”——當(dāng)線上服務(wù)出現(xiàn)Connection reset by peer卻查不到客戶端日志時(shí)你能立刻判斷是對(duì)方主動(dòng)斷連、中間設(shè)備劫持還是本端send()后未處理EPIPE當(dāng)壓測 QPS 上不去你能快速排除是SO_REUSEADDR缺失導(dǎo)致 TIME_WAIT 占滿端口還是TCP_NODELAY未關(guān)閉引發(fā) Nagle 算法堆積小包。本文不講“如何用 socket 寫個(gè)回顯服務(wù)器”那只是玩具。我們要做的是逐個(gè)拆解socket,bind,listen,accept,connect,send,recv,close這八個(gè)核心函數(shù)像調(diào)試內(nèi)核一樣審視每個(gè)參數(shù)的物理意義、每個(gè)返回值的錯(cuò)誤分支、每個(gè) flag 的內(nèi)存代價(jià)、每個(gè)調(diào)用在 TCP 狀態(tài)機(jī)中的精確落點(diǎn)。所有解釋均基于 Linux 5.10 內(nèi)核源碼路徑如net/core/sock.c,net/ipv4/af_inet.c與 glibc 2.34 實(shí)現(xiàn)拒絕“大概”“通?!薄耙话阏J(rèn)為”這類模糊表述。你會(huì)看到accept()如何通過sk_acceptq_is_full()判斷全連接隊(duì)列是否溢出send()在MSG_DONTWAIT下如何繞過 socket 鎖直接進(jìn)入tcp_sendmsg()以及為什么close()之后立即bind()同一地址仍可能失敗——答案不在文檔里而在inet_bind()中對(duì)INADDR_ANY的特殊處理邏輯中。提示本文所有代碼片段均來自真實(shí)可編譯的最小化測試用例已去除無關(guān)宏定義與錯(cuò)誤處理包裝僅保留最精簡的系統(tǒng)調(diào)用鏈路。你可以直接復(fù)制進(jìn).c文件用gcc -o test test.c編譯運(yùn)行觀察strace -e tracesocket,bind,listen,accept,connect,send,recv,close的輸出親手驗(yàn)證每一個(gè)結(jié)論。2. socket()不只是創(chuàng)建 fd而是啟動(dòng)整個(gè)網(wǎng)絡(luò)協(xié)議棧的“點(diǎn)火開關(guān)”socket()是所有網(wǎng)絡(luò)通信的起點(diǎn)但它的作用遠(yuǎn)不止于返回一個(gè)文件描述符。當(dāng)你寫下int sockfd socket(AF_INET, SOCK_STREAM, 0);內(nèi)核正在執(zhí)行一套精密的初始化流程其復(fù)雜度堪比啟動(dòng)一臺(tái)微型操作系統(tǒng)。2.1 協(xié)議族domain與套接字類型type的雙重約束AF_INET并非簡單指定“用 IPv4”而是觸發(fā)內(nèi)核加載inet_family_ops結(jié)構(gòu)體該結(jié)構(gòu)體定義了該協(xié)議族下所有 socket 操作的函數(shù)指針表。同理SOCK_STREAM不僅代表“面向連接”更決定了內(nèi)核將為該 socket 分配struct inet_sock而非struct udp_sock。關(guān)鍵在于domain和type的組合必須被內(nèi)核明確支持否則socket()直接返回 -1 并置errnoESOCKTNOSUPPORT。例如在僅啟用 IPv6 模塊的嵌入式系統(tǒng)中調(diào)用socket(AF_INET, SOCK_STREAM, 0)即使AF_INET存在也會(huì)因缺少對(duì)應(yīng)協(xié)議實(shí)現(xiàn)而失敗。我們實(shí)測過一個(gè)典型場景某物聯(lián)網(wǎng)網(wǎng)關(guān)在裁剪內(nèi)核時(shí)禁用了CONFIG_IP_TCPDIAG導(dǎo)致AF_INET協(xié)議族雖存在但SOCK_STREAM對(duì)應(yīng)的 TCP 初始化函數(shù)inet_stream_ops未注冊(cè)。此時(shí)socket(AF_INET, SOCK_STREAM, 0)永遠(yuǎn)失敗而socket(AF_INET, SOCK_DGRAM, 0)卻正?!?yàn)?UDP 初始化未被裁剪。這解釋了為何某些精簡版內(nèi)核環(huán)境下TCP 服務(wù)無法啟動(dòng)卻無任何日志報(bào)錯(cuò)。2.2 協(xié)議protocol參數(shù)的隱式?jīng)Q策機(jī)制第三個(gè)參數(shù)protocol常被設(shè)為 0但這絕不意味著“隨便選”。內(nèi)核會(huì)根據(jù)domain和type查找匹配的協(xié)議實(shí)現(xiàn)。以AF_INET SOCK_STREAM為例內(nèi)核遍歷inetsw_array表找到IPPROTO_TCP對(duì)應(yīng)的inet_stream_ops。若你顯式傳入IPPROTO_UDP則socket()直接返回 -1 并置errnoEPROTOTYPE因?yàn)?UDP 不支持流式語義。這個(gè)檢查發(fā)生在__sock_create()的pf-create()調(diào)用前屬于純協(xié)議層校驗(yàn)。更隱蔽的是IPPROTO_IP的行為。當(dāng)protocolIPPROTO_IP時(shí)內(nèi)核不會(huì)選擇具體傳輸層協(xié)議而是創(chuàng)建一個(gè)原始 socketraw socket允許用戶直接構(gòu)造 IP 頭。這意味著sendto()發(fā)送的數(shù)據(jù)將跳過 TCP/UDP 層由ip_queue_xmit()直接處理。這種 socket 需要CAP_NET_RAW權(quán)限且在容器環(huán)境中常被默認(rèn)禁用——這就是為何某些安全加固后的 Kubernetes Pod 無法運(yùn)行ping命令socket(AF_INET, SOCK_ICMP, IPPROTO_ICMP)失敗本質(zhì)是IPPROTO_ICMP被映射為IPPROTO_IP后權(quán)限不足。2.3 socket() 返回值的深層含義與資源泄漏風(fēng)險(xiǎn)socket()成功時(shí)返回非負(fù)整數(shù)這是大家熟知的。但需警惕兩個(gè)易被忽視的細(xì)節(jié)第一返回值是進(jìn)程級(jí) fd而非全局唯一標(biāo)識(shí)。同一進(jìn)程內(nèi)多次socket()可能返回相同數(shù)值如 3前提是之前使用close(3)關(guān)閉了該 fd。內(nèi)核的 fd 分配策略是“取當(dāng)前最小可用值”因此若程序存在 fd 泄漏如socket()后忘記close()fd 數(shù)會(huì)持續(xù)增長最終耗盡ulimit -n限制。我們?cè)ㄎ坏揭粋€(gè)長連接服務(wù)內(nèi)存緩慢增長的問題lsof -p pid顯示其打開的 fd 數(shù)穩(wěn)定在 1024但cat /proc/pid/fd | wc -l卻顯示 1025——多出的一個(gè)正是未關(guān)閉的 socket fd它被重復(fù)socket()覆蓋舊 fd 句柄丟失成為孤兒資源。第二socket()失敗時(shí) errno 的精確解讀至關(guān)重要。除常見的EMFILE進(jìn)程 fd 耗盡、ENFILE系統(tǒng) fd 耗盡外EAFNOSUPPORT表示協(xié)議族不支持如AF_UNIX在 Windows WSL1 中不可用EINVAL則多因type與domain組合非法如AF_INET6SOCK_PACKET。特別注意EACCES它并非權(quán)限不足而是內(nèi)核安全模塊如 SELinux拒絕創(chuàng)建該類型 socket。此時(shí)dmesg | tail會(huì)顯示avc: denied { create } for ... scontext... tcontext... tclasssocket需調(diào)整 SELinux 策略而非簡單加sudo。注意socket()創(chuàng)建的 socket 默認(rèn)處于“未綁定”狀態(tài)其本地地址為INADDR_ANY0.0.0.0端口為 0。這意味著它尚未關(guān)聯(lián)到任何具體網(wǎng)絡(luò)接口與端口不能接收連接但可以發(fā)起連接connect()會(huì)自動(dòng)為其分配臨時(shí)端口。這是理解后續(xù)bind()必要性的前提。3. bind() 與 listen()端口綁定的物理邊界與連接隊(duì)列的雙層緩沖設(shè)計(jì)bind()和bind()后的listen()構(gòu)成了服務(wù)器被動(dòng)監(jiān)聽的基石但它們的作用常被嚴(yán)重簡化。實(shí)際上bind()定義了 socket 的“網(wǎng)絡(luò)身份”而listen()則為其配置了“連接接納能力”二者共同構(gòu)成服務(wù)器對(duì)外服務(wù)的物理邊界。3.1 bind() 的四重校驗(yàn)從地址合法性到端口沖突檢測bind()的核心任務(wù)是將 socket 與特定 IP 地址和端口綁定。其內(nèi)部執(zhí)行四步關(guān)鍵校驗(yàn)第一步地址格式校驗(yàn)。對(duì)AF_INET內(nèi)核檢查sockaddr_in.sin_family AF_INET且sin_port為網(wǎng)絡(luò)字節(jié)序。若傳入主機(jī)字節(jié)序端口如htons(8080)忘記調(diào)用sin_port值將錯(cuò)誤如 8080 的主機(jī)序 0x1F90 在網(wǎng)絡(luò)序中為 0x901F 36895導(dǎo)致綁定到錯(cuò)誤端口。我們?cè){(diào)試一個(gè) Docker 容器服務(wù)其bind()總是失敗最終發(fā)現(xiàn)是構(gòu)建腳本中CFLAGS-D__USE_MISC導(dǎo)致htons()宏展開異常生成了錯(cuò)誤的字節(jié)序。第二步IP 地址有效性校驗(yàn)。INADDR_ANY0.0.0.0表示綁定到所有本地接口這是最常用場景。但若指定具體 IP如192.168.1.100內(nèi)核會(huì)調(diào)用inet_addr_type()查詢?cè)摰刂肥欠駥儆诒緳C(jī)路由表。若該 IP 未配置在任何網(wǎng)卡上如配置錯(cuò)誤或網(wǎng)卡 downbind()返回 -1 并置errnoEADDRNOTAVAIL。這解釋了為何某些云服務(wù)器在更換公網(wǎng) IP 后舊服務(wù)無法重啟bind()試圖綁定已釋放的舊 IP。第三步端口占用檢測。這是最易誤解的部分。內(nèi)核維護(hù)一個(gè)全局哈希表tcp_hashinfo.ehash存儲(chǔ)所有已綁定的(laddr, lport, raddr, rport)四元組。bind()時(shí)內(nèi)核計(jì)算lport的哈希值遍歷桶中所有條目檢查是否存在laddrtarget_laddr lporttarget_lport的條目。若存在且該條目 socket 的SO_REUSEADDR未設(shè)置則bind()失敗。但SO_REUSEADDR的作用常被誤讀它僅允許綁定到處于 TIME_WAIT 狀態(tài)的端口而非解決所有端口沖突。若另一進(jìn)程正以SO_REUSEADDR0綁定同一端口bind()仍會(huì)失敗。第四步特權(quán)端口保護(hù)。端口號(hào)小于 1024 被視為特權(quán)端口bind()時(shí)內(nèi)核檢查進(jìn)程有效 UID 是否為 0。若非 rootbind()返回 -1 并置errnoEACCES。這是 Linux 的基本安全機(jī)制無法繞過除非CAP_NET_BIND_SERVICE能力。某次我們部署 HTTPS 服務(wù)到 443 端口容器以非 root 用戶運(yùn)行bind()失敗。解決方案不是加sudo而是使用setcap cap_net_bind_serviceep /path/to/binary授予能力或改用端口映射如宿主機(jī) 443 → 容器 8443。3.2 listen() 的 backlog 參數(shù)全連接隊(duì)列與半連接隊(duì)列的協(xié)同機(jī)制listen(sockfd, backlog)的backlog參數(shù)常被解釋為“最大等待連接數(shù)”這是嚴(yán)重錯(cuò)誤。Linux 內(nèi)核中backlog實(shí)際控制全連接隊(duì)列accept queue的最大長度而半連接隊(duì)列SYN queue長度由內(nèi)核參數(shù)net.ipv4.tcp_max_syn_backlog控制二者獨(dú)立。半連接隊(duì)列SYN queue存放已完成三次握手第一步收到 SYN、第二步發(fā)送 SYN-ACK但尚未完成第三步收到 ACK的連接請(qǐng)求。其長度受tcp_max_syn_backlog限制超出則丟棄 SYN 包客戶端表現(xiàn)為連接超時(shí)。全連接隊(duì)列accept queue存放已完成三次握手收到 ACK、等待應(yīng)用層accept()取走的連接。其長度即listen()的backlog值但內(nèi)核會(huì)將其與net.core.somaxconn取最小值。例如listen(sockfd, 1024)但somaxconn128則實(shí)際隊(duì)列長度為 128。我們通過ss -lnt命令可觀察隊(duì)列狀態(tài)State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:8080 *:*其中Recv-Q是當(dāng)前全連接隊(duì)列中等待accept()的連接數(shù)Send-Q是該隊(duì)列的最大長度即min(backlog, somaxconn)。當(dāng)全連接隊(duì)列滿時(shí)內(nèi)核的行為取決于net.ipv4.tcp_abort_on_overflow若為 0默認(rèn)內(nèi)核丟棄客戶端發(fā)來的 ACK客戶端認(rèn)為連接成功但后續(xù)send()會(huì)觸發(fā) RST表現(xiàn)為Connection reset by peer若為 1內(nèi)核直接向客戶端發(fā)送 RST客戶端connect()立即失敗。這解釋了為何高并發(fā)場景下客戶端偶發(fā)Connection refused并非服務(wù)未啟動(dòng)而是全連接隊(duì)列溢出syncookies未啟用時(shí)SYN 包被丟棄。解決方案是調(diào)大somaxconnsysctl -w net.core.somaxconn65535并確保backlog參數(shù)足夠大。提示bind()后必須調(diào)用listen()才能使 socket 進(jìn)入監(jiān)聽狀態(tài)。未listen()的 socket 調(diào)用accept()會(huì)返回 -1 并置errnoEINVAL。listen()本身不阻塞它只是設(shè)置 socket 狀態(tài)為SS_LISTEN并初始化隊(duì)列真正的連接接納由后續(xù)accept()完成。4. accept() 與 connect()三次握手的用戶態(tài)鏡像與連接建立的雙向博弈accept()和connect()是 TCP 三次握手在用戶態(tài)的具象化體現(xiàn)但它們的操作時(shí)機(jī)、阻塞行為與錯(cuò)誤處理深刻反映了內(nèi)核與用戶空間的協(xié)作邏輯。4.1 accept()從內(nèi)核隊(duì)列取連接而非“接受連接請(qǐng)求”accept()常被誤解為“等待并接受客戶端連接”實(shí)則它是從全連接隊(duì)列中取出一個(gè)已建立的連接。其行為完全取決于隊(duì)列狀態(tài)與 socket 的阻塞模式阻塞模式默認(rèn)若全連接隊(duì)列為空accept()掛起當(dāng)前線程直到有新連接到達(dá)。掛起期間線程不消耗 CPU由內(nèi)核在連接入隊(duì)時(shí)喚醒。非阻塞模式O_NONBLOCK若隊(duì)列為空accept()立即返回 -1 并置errnoEAGAIN或EWOULDBLOCK。應(yīng)用需輪詢或結(jié)合select()/epoll_wait()使用。關(guān)鍵洞察在于accept()不參與三次握手過程。當(dāng)客戶端發(fā)送 SYN內(nèi)核在半連接隊(duì)列中創(chuàng)建條目收到 ACK 后內(nèi)核將條目移至全連接隊(duì)列。accept()僅是隊(duì)列的消費(fèi)者。因此accept()的性能瓶頸從來不是網(wǎng)絡(luò)延遲而是全連接隊(duì)列的長度與應(yīng)用層處理速度的匹配度。我們?cè)鴥?yōu)化一個(gè)金融行情推送服務(wù)accept()耗時(shí)從平均 5ms 降至 0.1ms。根本原因并非代碼優(yōu)化而是將backlog從 128 提升至 4096并將somaxconn設(shè)為 65535避免了隊(duì)列滿時(shí)的鎖競爭。strace顯示優(yōu)化前accept()頻繁因隊(duì)列空而epoll_wait()喚醒優(yōu)化后accept()幾乎總能立即取到連接。accept()返回的新 socket fd 與監(jiān)聽 socket fd 有本質(zhì)區(qū)別監(jiān)聽 socket fdstateSS_LISTENsk-sk_stateTCP_LISTEN用于accept()新 socket fdstateSS_CONNECTEDsk-sk_stateTCP_ESTABLISHED用于send()/recv()。二者共享同一struct sock的部分字段如sk-sk_family但擁有獨(dú)立的發(fā)送/接收緩沖區(qū)、擁塞控制狀態(tài)等。這意味著對(duì)新 socket 的setsockopt()如TCP_NODELAY不會(huì)影響監(jiān)聽 socket。4.2 connect()同步阻塞下的狀態(tài)機(jī)穿越與異步非阻塞的事件驅(qū)動(dòng)connect()的行為差異極大取決于 socket 是否設(shè)置O_NONBLOCK阻塞模式connect()會(huì)阻塞直至三次握手完成成功或超時(shí)失敗。阻塞期間socket 狀態(tài)經(jīng)歷TCP_SYN_SENT→TCP_ESTABLISHED成功或TCP_CLOSE失敗。超時(shí)由內(nèi)核tcp_syn_retries參數(shù)控制默認(rèn) 6 次約 127 秒。非阻塞模式connect()立即返回 -1 并置errnoEINPROGRESS表示連接正在后臺(tái)進(jìn)行。此時(shí)應(yīng)用需用select()/epoll_wait()監(jiān)聽該 socket 的可寫事件POLLOUT。當(dāng)可寫事件觸發(fā)調(diào)用getsockopt(sockfd, SOL_SOCKET, SO_ERROR, err, len)檢查err若為 0連接成功否則為錯(cuò)誤碼如ECONNREFUSED。這種異步模式是高性能客戶端的基礎(chǔ)。例如一個(gè) HTTP 客戶端需并發(fā)請(qǐng)求 1000 個(gè) URL若用阻塞connect()總耗時(shí)為 1000 × 平均連接時(shí)間用非阻塞connect()epoll總耗時(shí)僅為單次連接的最大時(shí)間。但需警惕connect()的一個(gè)陷阱當(dāng)connect()在非阻塞模式下返回EINPROGRESS后若在select()返回可寫前對(duì) socket 調(diào)用send()內(nèi)核會(huì)返回errnoEAGAIN而非等待連接完成。正確做法是connect()后只監(jiān)聽可寫事件確認(rèn)SO_ERROR0后再進(jìn)行 I/O。我們實(shí)測過一個(gè) DNS 解析器其connect()后未檢查SO_ERROR就直接send()導(dǎo)致大量EAGAIN錯(cuò)誤。修復(fù)后解析吞吐量提升 3 倍。注意connect()成功后socket 的遠(yuǎn)程地址sin_addr,sin_port被內(nèi)核自動(dòng)填充可通過getpeername()獲取。這與bind()填充本地地址類似是內(nèi)核在網(wǎng)絡(luò)層完成的元數(shù)據(jù)注入。5. send() 與 recv()數(shù)據(jù)流動(dòng)的原子性、緩沖區(qū)管理與錯(cuò)誤碼的精準(zhǔn)歸因send()和recv()是數(shù)據(jù)傳輸?shù)暮诵牡鼈兊恼Z義常被過度簡化?!鞍l(fā)送成功”不等于“對(duì)方已收到”“接收成功”不等于“一次收完所有數(shù)據(jù)”。理解其底層緩沖區(qū)模型與錯(cuò)誤碼含義是編寫健壯網(wǎng)絡(luò)程序的關(guān)鍵。5.1 send() 的三重緩沖應(yīng)用層、內(nèi)核 socket 緩沖區(qū)、網(wǎng)卡 DMA 緩沖區(qū)send()的執(zhí)行流程涉及三層緩沖應(yīng)用層緩沖區(qū)你的char buf[1024]內(nèi)核 socket 發(fā)送緩沖區(qū)sk-sk_write_queue大小由SO_SNDBUF控制網(wǎng)卡 DMA 緩沖區(qū)網(wǎng)卡硬件的環(huán)形緩沖區(qū)。send()的返回值ssize_t表示成功拷貝到內(nèi)核 socket 緩沖區(qū)的字節(jié)數(shù)而非已發(fā)送到網(wǎng)絡(luò)的字節(jié)數(shù)。這意味著若send()返回n len表示緩沖區(qū)已滿僅拷貝了前n字節(jié)剩余需重試若send()返回len數(shù)據(jù)已進(jìn)入內(nèi)核緩沖區(qū)但可能仍在排隊(duì)等待tcp_write_xmit()調(diào)度發(fā)送若send()返回 -1表示拷貝失敗原因在errno中。常見錯(cuò)誤碼深度解析EAGAIN/EWOULDBLOCK非阻塞 socket 的發(fā)送緩沖區(qū)滿。需等待epoll的EPOLLOUT事件。EPIPE對(duì)方已關(guān)閉連接close()或shutdown(SHUT_WR)本端繼續(xù)send()。此時(shí)SIGPIPE信號(hào)默認(rèn)終止進(jìn)程應(yīng)捕獲或忽略signal(SIGPIPE, SIG_IGN)。ECONNRESET對(duì)方發(fā)送 RST 包通常因?qū)Ψ竭M(jìn)程崩潰或強(qiáng)制關(guān)閉連接。ENOBUFS內(nèi)核內(nèi)存不足無法分配 skbsocket buffer結(jié)構(gòu)體。這在高并發(fā)小包場景下可能出現(xiàn)需調(diào)大net.core.wmem_max。我們?cè)龅揭粋€(gè)實(shí)時(shí)音視頻服務(wù)send()頻繁返回EAGAINss -i顯示snd_cwnd擁塞窗口極小。根因是TCP_NODELAY未關(guān)閉Nagle 算法將多個(gè)小包合并但應(yīng)用層又以 20ms 間隔發(fā)送導(dǎo)致緩沖區(qū)積壓。關(guān)閉TCP_NODELAY后send()成功率達(dá) 100%。5.2 recv() 的數(shù)據(jù)粘包與分包為什么永遠(yuǎn)不要假設(shè)一次 recv() 收完一個(gè)“消息”recv()的核心特性是流式語義TCP 是字節(jié)流協(xié)議沒有消息邊界。recv()返回的是當(dāng)前 socket 接收緩沖區(qū)中可用的字節(jié)數(shù)與應(yīng)用層“消息”無關(guān)。若發(fā)送方send()1000 字節(jié)接收方recv()可能返回 100、500、400三次調(diào)用也可能返回 1000一次調(diào)用甚至返回 1極端情況。若發(fā)送方連續(xù)send()兩次各 500 字節(jié)接收方recv()可能返回 1000合并、700300、500500 等任意組合。這導(dǎo)致“粘包”多個(gè)消息合并與“分包”單個(gè)消息拆分問題。解決方案必須由應(yīng)用層實(shí)現(xiàn)常見有定長包頭先recv()4 字節(jié)解析出消息體長度n再recv()n字節(jié)分隔符如 HTTP 的\r\n\r\n逐字節(jié)掃描查找自定義協(xié)議如 MQTT 的remaining length字段。recv()的flags參數(shù)提供關(guān)鍵控制MSG_PEEK窺探數(shù)據(jù)不移除緩沖區(qū)內(nèi)容可用于協(xié)議探測MSG_WAITALL阻塞直至收滿len字節(jié)僅對(duì)阻塞 socket 有效MSG_DONTWAIT本次調(diào)用不阻塞等價(jià)于臨時(shí)設(shè)置O_NONBLOCK。一個(gè)經(jīng)典陷阱是recv()返回 0這表示對(duì)方已關(guān)閉連接shutdown(SHUT_WR)或close()即 EOF。此時(shí) socket 進(jìn)入FIN_WAIT2狀態(tài)本端應(yīng)停止send()并準(zhǔn)備關(guān)閉。若忽略此返回值繼續(xù)recv()會(huì)持續(xù)返回 0造成忙等。提示send()和recv()的緩沖區(qū)大小可通過getsockopt(sockfd, SOL_SOCKET, SO_RCVBUF/SO_SNDBUF, val, len)查詢。默認(rèn)值通常為 212992 字節(jié)208KB但可通過setsockopt()調(diào)整。增大緩沖區(qū)可減少EAGAIN但會(huì)增加內(nèi)存占用與延遲數(shù)據(jù)在緩沖區(qū)停留更久。6. close() 與 shutdown()連接終結(jié)的兩種哲學(xué)——資源釋放與連接狀態(tài)的精細(xì)控制close()和shutdown()都用于結(jié)束 socket 連接但它們的設(shè)計(jì)哲學(xué)截然不同close()是粗粒度的資源回收shutdown()是細(xì)粒度的連接狀態(tài)控制。混淆二者是網(wǎng)絡(luò)編程中最常見的錯(cuò)誤來源之一。6.1 close()引用計(jì)數(shù)驅(qū)動(dòng)的資源清理而非立即斷連close()的本質(zhì)是減少文件描述符的引用計(jì)數(shù)。每個(gè) socket fd 在內(nèi)核中對(duì)應(yīng)一個(gè)struct file結(jié)構(gòu)close()將其f_count減 1。僅當(dāng)f_count降為 0 時(shí)內(nèi)核才真正釋放資源并觸發(fā) TCP 四次揮手。這意味著若同一 socket fd 被dup()或fork()復(fù)制close()僅減少計(jì)數(shù)連接仍保持活躍若子進(jìn)程繼承了父進(jìn)程的 socket fd父進(jìn)程close()后連接未斷子進(jìn)程仍可send()/recv()close()后立即bind()同一地址可能失敗因?yàn)檫B接仍處于TIME_WAIT狀態(tài)close()觸發(fā) FIN但TIME_WAIT由內(nèi)核維護(hù)。close()的副作用是它會(huì)向?qū)Χ税l(fā)送 FIN 包但僅當(dāng)本端無待發(fā)送數(shù)據(jù)且接收緩沖區(qū)為空時(shí)。若close()前有未send()的數(shù)據(jù)內(nèi)核會(huì)先發(fā)送這些數(shù)據(jù)再發(fā) FIN若接收緩沖區(qū)有未recv()的數(shù)據(jù)close()會(huì)發(fā)送 RST 而非 FIN導(dǎo)致對(duì)端收到Connection reset by peer。我們?cè){(diào)試一個(gè)代理服務(wù)客戶端連接后立即斷開日志顯示close()后recv()返回 -1。根因是close()時(shí)接收緩沖區(qū)有殘留數(shù)據(jù)內(nèi)核發(fā) RST 清理代理的recv()捕獲到ECONNRESET。解決方案是在close()前循環(huán)recv()直至返回 0 或EAGAIN。6.2 shutdown()面向連接狀態(tài)的精準(zhǔn)手術(shù)刀shutdown()提供對(duì)連接狀態(tài)的精確控制其how參數(shù)決定操作方向SHUT_RD0關(guān)閉接收方向。內(nèi)核丟棄后續(xù)到達(dá)的數(shù)據(jù)recv()立即返回 0EOF。對(duì)端send()不受影響。SHUT_WR1關(guān)閉發(fā)送方向。內(nèi)核發(fā)送 FIN 包本端不能再send()但可繼續(xù)recv()。對(duì)端recv()將返回 0。SHUT_RDWR2同時(shí)關(guān)閉收發(fā)等價(jià)于SHUT_RD SHUT_WR。shutdown()的優(yōu)勢(shì)在于狀態(tài)分離。例如HTTP 客戶端發(fā)送完請(qǐng)求后可shutdown(sockfd, SHUT_WR)告知服務(wù)端“請(qǐng)求結(jié)束”然后recv()等待響應(yīng)無需擔(dān)心服務(wù)端還在發(fā)數(shù)據(jù)。這比close()更安全因?yàn)閏lose()可能因引用計(jì)數(shù)未歸零而延遲斷連。一個(gè)關(guān)鍵區(qū)別是shutdown()不受文件描述符引用計(jì)數(shù)影響。即使 fd 被dup()shutdown()也立即生效因?yàn)樗僮鞯氖堑讓觭truct sock而非struct file。我們實(shí)測過一個(gè) WebSocket 服務(wù)其心跳機(jī)制要求客戶端在ping后必須pong。若客戶端close()連接服務(wù)端可能因close()延遲而錯(cuò)過pong觸發(fā)超時(shí)斷連。改用shutdown(sockfd, SHUT_WR)后服務(wù)端立即收到 FIN可準(zhǔn)確判斷客戶端已退出。注意close()和shutdown()都會(huì)觸發(fā)內(nèi)核的連接狀態(tài)機(jī)遷移但close()的時(shí)機(jī)由引用計(jì)數(shù)決定shutdown()的時(shí)機(jī)由調(diào)用者精確控制。在多線程或多進(jìn)程環(huán)境中優(yōu)先使用shutdown()進(jìn)行連接管理close()僅用于最終資源釋放。7. 實(shí)戰(zhàn)避坑指南從 10 個(gè)真實(shí)故障案例看 socket 接口的隱藏雷區(qū)理論終需落地。以下是我們從十年 C/C 服務(wù)器開發(fā)中提煉的 10 個(gè)高頻故障案例每個(gè)都對(duì)應(yīng)一個(gè) socket 接口的典型誤用附帶復(fù)現(xiàn)方法與根治方案。7.1 案例 1bind()失敗于EADDRINUSE但netstat顯示端口空閑現(xiàn)象bind()返回errnoEADDRINUSEnetstat -tuln | grep :8080無輸出。根因端口被TIME_WAIT狀態(tài)的 socket 占用。netstat默認(rèn)不顯示TIME_WAIT需加-a參數(shù)netstat -tulna | grep :8080。復(fù)現(xiàn)啟動(dòng)服務(wù) A 綁定 8080客戶端連接后斷開A 立即close()立即啟動(dòng)服務(wù) B 綁定 8080失敗。根治bind()前設(shè)置SO_REUSEADDRint opt 1; setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, opt, sizeof(opt));注意SO_REUSEADDR允許綁定TIME_WAIT端口但不允許多個(gè)進(jìn)程同時(shí)綁定同一端口除非SO_REUSEPORT。7.2 案例 2accept()返回的 socket 無法send()errnoEAGAIN現(xiàn)象accept()成功但首次send()返回 -1 且errnoEAGAIN。根因accept()返回的 socket 繼承了監(jiān)聽 socket 的O_NONBLOCK標(biāo)志。若監(jiān)聽 socket 設(shè)為非阻塞新 socket 也是非阻塞。復(fù)現(xiàn)fcntl(listen_fd, F_SETFL, O_NONBLOCK)后accept()對(duì)新 fdsend()。根治accept()后顯式清除O_NONBLOCKint flags fcntl(new_fd, F_GETFL, 0); fcntl(new_fd, F_SETFL, flags ~O_NONBLOCK);或統(tǒng)一使用epoll管理所有 socket避免混合阻塞/非阻塞模式。7.3 案例 3recv()返回 0但連接未斷服務(wù)僵死現(xiàn)象recv()返回 0程序未處理 EOF循環(huán)recv()陷入忙等。根因recv()返回 0 表示對(duì)端shutdown(SHUT_WR)或close()連接已半關(guān)閉本端應(yīng)停止recv()并準(zhǔn)備關(guān)閉。復(fù)現(xiàn)客戶端shutdown(sockfd, SHUT_WR)后退出服務(wù)端recv()返回 0。根治recv()后嚴(yán)格檢查返回值ssize_t n recv(sockfd, buf, sizeof(buf), 0); if (n 0) { // 處理數(shù)據(jù) } else if (n 0) { // 對(duì)端關(guān)閉清理資源 close(sockfd); return; } else { // 錯(cuò)誤處理 }7.4 案例 4send()大量返回EAGAINCPU 占用 100%現(xiàn)象高并發(fā)下send()頻繁返回EAGAINtop顯示 CPU 100%。根因非阻塞 socket 的send()失敗后應(yīng)用未等待epoll事件而是立即重試形成忙等。復(fù)現(xiàn)send()返回EAGAIN后while (send() -1 errno EAGAIN);。根治send()失敗且errnoEAGAIN時(shí)將 socket 加入epoll監(jiān)聽EPOLLOUT在事件觸發(fā)后再重試。7.5 案例 5connect()超時(shí)長達(dá) 127 秒遠(yuǎn)超預(yù)期現(xiàn)象非阻塞connect()后select()等待 5 秒但實(shí)際連接耗時(shí) 127 秒。根因select()超時(shí)后connect()仍在后臺(tái)進(jìn)行。select()返回可寫但getsockopt(... SO_ERROR)返回 0 前連接未完成。復(fù)現(xiàn)connect()后select()等待 5 秒select()返回可寫但SO_ERROR仍為EINPROGRESS。根治select()返回可寫后必須調(diào)用getsockopt()檢查SO_ERROR
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
激情文学 综合 九月| 9热网站| 操B五月天| 99热这里有精品| 丁香久久五月天视频在线观看 | 丁香五月电影| 亚洲综合另类| 99热成人在线观看| 99热在这里只有免费精品| 色婷婷av综合网| 婷婷五月天色色| 五月丁香网中文字幕| 99热第一页| 综合久久影院| 天天色噜| 五月天久久丁香| 九久9精品| 五月丁香综合色婷婷| 亚洲另类婷婷综合| 久婷久婷| 国产古装妇女野外A片| 日本激情综合| 日韩av干| 婷婷激情五月天色| 欧美亚洲999| 激情婷婷激情在线不卡| 丁香六月婷婷缴情欧美| 香蕉久久国产AV一区二区| 丁香五月婷婷色偷偷| 996热| 97碰 在线视频观看| 婷婷丁香五月天激情| 五月丁香欧美综合| www久热com| 俺来也综合网精品一区| 五月天激情小说| 国产综合81p| 亚洲午夜成人av电影网| 伊人在线视频| 久久久一级AAA| 超碰碰碰碰| 天天爽夜夜爽夜夜爽精品视频| 五月丁香视频在线观看| 欧美色播综合在线观看| 国产精品久久99| 九9九9无码| 99婷婷精品推荐在线视频| 99热精品在线观看| 99热精品在线在线| 99爱在线视频| 九九99久久精品| 亚洲精品婷婷| 丰满女老板BD高清A片| 亚洲丁香花色| 久久婷婷影院| 777米奇影视第四色| 婷婷色色五月天| 色你久久| 午夜丁香婷婷| 免费无码毛片一区二区A片| 99久re热视频精品98| 亚洲婷婷91丁香| 伊人玖玖网| 99久久五月婷婷| 狠狠干青青草| 午夜丁香婷婷| 色热久| 欧美va在线观看| 综合久久99| 亚洲视频图片婷婷五月| 色色色五月婷| 来吧亚洲综合网| 热99这就是精品视频| 99久久99九九99九九九| AV片一区在线观看| 国内在线99视频| 国产第99页| 综合玖玖偷拍| 综合亚洲六月婷婷在线| 天天透天天摸天天舔| 亚洲五月天狠狠| 米奇影视五月天| 激情五月亚洲| 久久精品视频99| 成人av免费观看| 天天操天天干天天日| 99热这里只有精品在线观看| 九九操屄| 婷婷五月综合网| 日韩人妻无码专区| 人人人操97| 天天日天天干天天天| 五月亚洲| 五月激情小说| 亚洲影院婷婷色| 超碰99资源站| 婷婷五月天无码熟女| 99国产性感视频| 99这里只有精品|v| 在线只有精品| 色啦啦视频| 99er热精品视频| 五月婷婷影院| 狠狠五月激情婷婷直播片| 五月婷婷丁香综合网| 狠狠色综合网站久久久久| 天天做天天爱天天玩| 久久婷婷网| 91久久久久久| 婷婷狠狠97| 就要去操亚洲成人精品五月天丁香婷婷| 久色成人| 婷婷五月综合激情| 午夜色丁香| 超碰com| 五月 丁香 欧美| 五月天色社区| 极品少妇高潮啪啪AV无码| 国产av网| 婷婷五月丁香高清无码| 免费黄色视频网址| 69人妻人人澡人人爽久久| 婷五月丁香俺| 婷婷五月天综合AV| 99热草草| 热久久思思热思思| 美女网黄| 丁香综合日产精品久久| 99精品激情| 五月婷婷丁香狠狠撸久久| 五月天婷婷操逼视频| 亚洲妇女熟BBW| 香蕉大综综综合久久| 五月天婷婷伊人| www.黄色片-久久成人国产精品在线播放-999AV | 久久婷婷五月综合精品蜜芽| 婷婷五月丁香在线视频| 岛国av网站| 六月丁香啪| 激情文学天天| 欧美99| 国产精女同一区二区三区久| 密臀久久| 桃色五月天| 天天综合色99| 激情五月狠狠| 婷婷婷婷婷婷婷婷婷婷丁香| 亚洲一色色色色色色色色| 五月婷婷啪啪啪啪| 9久热在线视频| 五月色亭丁香| 五月丁香激情综合网| www.五月天婷婷| wwwC0maV五月花| 99这里只有精| 五月丁香色婷婷婷基地| 激情五月天色色网| 99热欧| 天天噜噜| 婷香五月网在线| 九月丁香| 5月色亭亭视频| 九九热99热| 伊人久久大香线蕉av最新| 第四色五月天| 91精品久久久久久久久 | 久久精彩免费视频精彩免费视频| 99热精品在这里| 嫩模aV在线| 狠狠久久婷五月| 综合一区二区三区| 五月丁香色| 婷婷午夜精品久久久| 亚洲激情五月| 久久免费9| 99激情在线| 99久久www| 五月婷激情影院| se99热久久一本| 五月丁香偷拍| 九九热中文| 色色色99| 色色色99韩| 亚洲中文字幕网| 超碰人人在线| 这里只有精品99www| 激情内射人妻1区2区3区| 亚洲五月天伊人| 嫩BBB搡BBBB榛BBBB| 婷婷五月天色网久| 日韩AV中文字幕在线| 婷婷欧美| 亚洲久热| 五月停停大香蕉| 丁香六月激情综合啪啪| 9久久久久久久久久久| 婷婷丁香五月麻豆| 天天操夜夜夜拍拍拍| 激情婷婷丁香五月| 婷婷六月色开 | 婷婷五月花丁香| 日韩精品无码AV| 婷婷五月天小说| 99日本精品视频热| 国产婷伊人| 久久五月综合| 伊人影音无码一区二区三区| 琪琪色五月婷婷老师| 拳交大逼| 久久久精品99亚洲综合| 婷婷久久婷婷色五月| www.婷婷五月天| 这里只有精品99视频| 碰碰碰97国产| 九九久久精品| 综合一本道| 91AV婷婷| 99爱在线| 俺去也五月| 五月婷婷伊人久久| 人妻22p| 欧美成人精品A片免费一区99| 日本激情五月天‘| 婷婷丁香六月| 久久天堂色| 久久久久er热| 26uuu在线观看| 五月天激情黄色小说在线观看| 国产成人精品一区二三区熟女在线| 日本va视频| 五月丁香婷草| 内射 无码 伊人| 五月丁香精品| 五月色婷婷综合| 超碰99在线观看| 色婷青青| 97色色视频| 激情5月婷婷| 丁香五月激情六月欧亚激情综合导航 | 97在线刺激| 欧美久久五月婷婷| 九热...av| 丁香五月天操B| 99在线视频播放| 丁香五月天婷婷中文| 手机在线日韩视频中文字幕| 特黄三级又爽又粗又大| 在线观看免费视频| 五月色网| 久久久久久久久久8888| 六月婷婷激情| 狠狠色噜噜色狠狠狠综合久久成人波| 色婷婷精品小视频| 噜噜噜狠狠色综合| 991精品在线视频| 97caop| 久久婷婷六月综合| 激情四射婷婷| 婷婷五月天伊人| 久色中文| 成人网站免费sxj| 六月婷婷综合| 五月色婷婷中文字幕| 99热香港| 色爱爱综合网| 中文字幕av久久爽| 色五月天 丁香| 伊人色综合网| 亚洲色五月| www.婷婷.com| jiZZdr| 久超超碰| 天天搡日日搡aaaaⅩ| 五月天天天色| 色综合色色色| 人人摸人人澡人人| 丁香五月情| 丁香五月天色婷婷| 婷婷六月综合激情| 色综合天天综合成人网| 久久九九色| 亚洲情a| 这里只有国产精品在线| 五月婷婷婷婷婷婷艺术| 五月婷婷九| 亚洲激情校园| 五月社区婷婷激情| 99热这里只有国产精品| www,五月丁,com| 五月丁香WWW| 夜夜躁狠狠| 激情五月天在线观看婷婷| 婷婷精品在线| 青青草原中文字幕| 综合久久丁香婷婷,五月婷婷六月丁香,开心激情综合网,六月丁香在线观看,婷婷丁 | 日日狠狠久久偷偷四色综合免费| 久久婷婷五月天亚洲欧美| se99在线| 色丁香六月| 色婷婷色婷婷五月| 婷婷五月色天| 97久久人人| 婷婷五月天影院| 天天干狠狠| 狠狠综合网| 日本欧美成人片AAAA| 99热精品在线播放| 99热这里只有精品86| 婷婷丁香激情五月天色色| WWW.99热| 91婷婷色| 婷婷激情五月综合| 亚洲岛国电影| 中文字幕九九九九| 欧美又粗又大一区二区在线观看| 色色色欧美色色| 丁香五月婷在线观看| 天天碰夜夜爽| 婷婷五月成人| 综合色、色综合| 草榴成人影片| 男人天堂99| 五月天激情国产综合婷婷婷就去爱| 六月丁香花婷婷| 六月婷婷日| 国产成人+亚洲+欧洲| 五月开心深爱激情网| 五月婷婷综合丁香视频| 丰满人妻一区二区三区| 激情五月天.色网| 91视频综合网| 狠狠肏综合网| 在线观看亚洲AV| 色婷婷婷婷| 91打屁股免费看| AV六月丁香| 天堂中文国产| 欧美婷婷五月天综合| 色婷婷五月天偷拍| 国产成人一区二区三区在线观看| 日韩无码性爱| 日 日干 日日做| 丁香六月婷婷综合欧美| 99视频内射三四| 色色图五月天| 久热久色| 亚洲天堂大香蕉| 五月激情小说| 91久久综合亚洲噜噜成人在线| 激情五月婷婷综合| 天天做天天爱| 日本黄色一级| 欧美99热| www.操.com| 久久538| 欧美三级巜人妻互换| 涩涩婷婷五月| 激情综合网 激情五月天| 五月婷婷六月色| 五月天婷婷基地| 久久狠婷婷| 袁子仪视频观看| 五月天桃色深爱网| 99精品久久久久久| 99热在这里只有免费精品| 综合性爱网| 日日日日做夜夜夜夜无码| 99热网站| 97操资源婷婷| 午夜丁香六月婷| 日本三级中文字幕| 久久久精品99| 丁香婷在线| 少妇激情五月天| 无码九九九九| 九九热视频思思| 天天拍天天操| 五月丁香免费视频| 色五月五月天色婷婷色五月| 日韩野外 无套| 婷婷成人网五月天| 日韩AV大全| 操日本三片99| 天天操婷婷| 万月丁香狠狠爱| 婷婷五月蜜桃成人桃色丁香| 可以看的av| 日本WWW九九九| 五月天成人在线播放丁香| 久久国产色| 超级黄色片| 天天夜夜爽| 成人做爰黄A片免费看直播室男男| 色播五月婷婷| 婷婷五月av| www.99热在线| 第五色婷婷| 99爱在线| 天天综合社区| 久9热插入| 伊人网色婷婷五月天| 国产做A爰片毛片A片美国| 91狠狠综合久久| 生活片五区| 99九九中文字幕视频| 天天干狠狠艹| 婷婷第一页| 综合色五月| 影音先锋 91工厂| 激情六月天| 激情五月天色色网| 99在线免费观看| 久久久宗合视频88| 操久久网| 婷婷五月在线视频| 丁香花操逼| 玖玖婷婷五月| 亚洲天堂爱爱| 婷婷色婷婷| 欧美婷婷五月丁香| 亚洲激情丁香五月天色| 五月色色激情网| 97人碰人操| wwwxxx五月婷婷小说| 欧美电影在线观看| 六月狠狠综合| 99伊人婷婷在线| 欧美五月丁香| 九九这里是免费的视频5| 五月精品| 色优久久| 狠狠色噜噜狠狠色噜噜噜999| 香蕉综合网| 色色99| 天天色色天天| 日本人妻丁香婷婷久久寝取熟女五月| 香蕉AV777XXX色综合一区| 九九热这里有精品23| 五月天色色网站| 欧美黑人巨大猛烈cuckold| 国产精产国品一二三在观看| 五月天婷婷影院影院| 久久久91精品| 五月天淫乱视频| 婷婷爱爱蜜臀天天操| 五月婷婷六月丁香综合| 九九热这里有精品23| 亚洲色就是色色色| 丁香五月天色婷婷| 精品五月视频婷婷在线观看| 婷婷五月天国产传媒| 婷婷五月综合激情免费| 欧美A级网站| 极品人妻VIDEOSSS人妻| 停婷丁五月在线| 狠狠色婷婷777| 国外亚洲成AV人片在线观看| 五月开心久久| www.99热最新视频8| 人妻有码乱操| 国产亚洲99久久精品| 婷婷久久五月天亚洲欧美国产日韩在线观看| 色欧美色色色| 99热在线精品观看| 思思久日精品视频| 综合久| 色欧美色色色| 成人短视频在线| 亚洲激情电影五月天色婷婷丁香一起草| 97久久婷婷色| www,天天干| 五月天激情婷婷小说| 任你操精品免费| av九九| 久久五月天色| 婷婷97狠狠干| 九九99九九99九九99视频网| 综合久久五| 色狠狠综合网| 欧美日本va| 亚洲激情亚洲激情 | 五月丁六月香av| 免费人人操| 99精品偷自拍| 激情五月婷婷网| 91人无码久久久久久| www.婷婷五月天| 日狠狠| 国产精品噜噜在线视频| 7超碰自拍| 99久久偷拍视频| 玖玖婷婷五月天| 亚洲另类日本| 六月狠狠综合| 夜夜天天久久婷婷| 久久色情| 婷婷大乡焦噜噜| 深夜婷婷 丁香| 综合激情站| 久久五月天综合| 99热这里只是精品| 六月激情婷婷综合| 久久五月视频| 97碰在线视频| 天天操中文字幕| 热婷婷av| 99精品视频播放| 五月婷婷综合网| 久久99精品九九久久久婷婷| 天天色99| www.狠狠| 激情五月婷婷五月| 婷婷色情六月| 狠狠插日日干撸| 色亚洲色宗合| 激情五月天综合图片小说网站| 婷婷久久网| 色色色五月婷| 人人干女人| 中文字幕天天干| 高清a片基地| 综合色、色综合| 久久久97| 色五月综合网| 婷婷五月天激情小说| 婷婷大香蕉| 五月婷婷色色色| 91九色熟女| 六月撸婷婷| 99热资源在线| 99热这里| 99热国产| 亚洲精品婷婷| 99色色| 婷婷视频网| 日日撸夜夜操| 国产亚洲精品AAAAAAA片| 六月丁香五月婷婷| 中文字幕人成乱码在线观看| 婷婷99视频在线| 成人丁香婷婷| 亚洲精品444久久久久久| 高清 码 免费看片短视频| 99久久新视频| 99欧州偷拍视频| 殴美激情综合网| 99热自拍| www.爱操com.| 激情亚洲网| 色五月综合| 91大神操美女| 26uuu成人网| 亚洲综合五月天| 日韩一区二区A片免费观看| 欧美激情-区二区三区| 草AV9999| 婷婷五月丁香五月综合网| 婷婷色六月| 爆乳熟妇一区二区三区爆乳| 色五月人妻| 人与禽A片啪啪| 97综合视频在线| 超碰色人妾| 在线另类视频| 丁香六月 人妻| 午夜丁香五月天综合| 亚洲综合色网| 六月丁香啪啪啪| 99精品偷自拍| 91无码高清| 久久五月婷婷电影| 国产日日操夜夜操的肉棒视频| 婷婷金品综合视频| 99热超碰在线| 丁香婷婷老熟女综合网| 久久久久网站| 亚洲AV激情五月综合网| 成人丁香五月| 五月婷婷六月激情| 亚洲无码猫咪| 99 r热| 久久九精品| 激情五月丁香六月综合AVXXXX| 色色色网站| 97亚洲精品| 在线播放中文字幕| 99热这里只有是亚洲国产| 9久久婷婷国产综合精品性色| 婷婷六月色| 婷婷激情四射五月天| 婷婷五月亚洲激情| 日日杆天天| 中文字幕在线免费观看视频| 六月丁香啪| 久久免费精品小视频| 91人妻视频| 91超级碰碰碰| 操逼综合网| 婷婷五六月丁香| 99色热| 亚洲日本韩国| 天天射美女| 99re这里只有精品在线观看| 99精品热| www91久久| 五月婷婷六月爱| 99在线资源| 色香蕉婷婷| 激情九月婷婷| 久久五月丁香| 亚洲99热| 成人婷婷深爱综合网| 精品久久9| 丁香五月伊人| 亚洲亚洲人成综合网络| 九九黄色网| 婷婷六月丁香五月| 激情四射亚洲| 婷婷激情另类| 激情综合网五月天| 色老久久| 99精品免费视频| 在线中文AV| site:901-07.com| 丁香五月婷婷激情尤物| 69久久久| 天天干天天叉| 久婷婷视平| 久久激情综合| 九九热在线视频| 欧美激情综合色综合啪啪五月| 色婷视频| 天干干夜夜操| 丁香六月婷婷| 99九九在线| 激情五月婷婷啪啪| 婷婷激情五月色综合| 国外亚洲成AV人片在线观看| 丁香五月天天哦| 久久婷婷色| 日本激情91| 天天操天天操天天操天天操天天操 | 欧美WW在线网| 青草五月天| 中文字幕高清av| 九色色| 五月婷婷六月激情| 99视频精品全部免费观看| 成人无码髙潮喷水A片| 99热只有精品在线播放| 这里只有精品2| 色狠狠综合| 99热偷拍| 大香蕉啪啪啪| 久操婷婷| 天天色综合色| 99五月香婷婷丁香在线视频| 小视频一区| 婷婷五月丁香基| 丁香五月激情性色郤| 九九综合影音先锋| 99热无码| 婷婷刺激综合| 国产99久久久| 六月丁香婷婷五月天| 青草五月天| 天天色天天爽| 97亚洲视频在线| 99性爱精品| 国产综合A片| 五月天综合在线观看视频| 婷婷久久18| 97人妻碰碰碰久久香蕉| 婷婷丁香人妻天久久| 色婷婷基地| 色综合久久天天综合网 | 五月婷婷五月天亚洲无码| 久9精品视频在线| 精品99在线观看| 97精品在线| 天天日天天狠狠操| 婷婷五月激情四射手| 激情五月视频在线婷婷| 色偷偷色婷婷| 中文字幕在线日亚州9| 五月天小说激情| 极品嫩草| 超碰成人在线观看| 色五月开心五月激情五月| 久久婷婷五月丁香蜜桃网| 这里只有精品在线视频在线观看| 激情床戏| 99久久国产宗和精品1上映| 五月 婷婷 成人| 另类激情四射| 亚洲V国产V欧美V久久久久久| www色中色综合| 激情无码网| 五月天大香蕉| 日日爽日日| www99热| 伊人久久婷婷五月综合97色| 综合性爱网| 九九热只有这里是精品| 丁香婷婷五月人体| 99热思思| 婷婷五月丁香五月综合网| 这里只有精品视频222| 99热10在线高清播放| 原琪琪色影院| 色婷婷在线视频综合| 好看的国产精品| 亚洲精品白浆高清久久久久久| 色色色色色色网| ri电影在线| 99九九热视频免费| 日本人妻伦在线中文字幕| 无人精品在线视频| 欧美天天综合网站上去吧| 91色干| 少妇性BBB搡BBB爽爽爽电影| 婷丁香五月天| 五月丁香亭亭天天舔| 五月婷精品| 人妻在线观看视频| 婷婷综合网| 五月天成人在线播放| 91色色五月天| 六月婷婷av| 婷婷激情啪啪| 亚洲午夜精品久久久久久人妖| 成人 AV播放| 欧美激情综合色综合啪啪五月| 激情综合五| 激情婷婷五月色| 九九综合| 日本三级毛片| 中文字幕不卡网站| 五月天丁香| 99色婷婷| 久久99精品久久久久久三级| 色婷亚洲| 五月丁香在线婷婷蜜桃| 天天日日夜夜爽| 五月天婷综合| 人人综合色| 欧类av怡春院| 9久久精品| 丁香九月久久| 日韩一级网站| 91婷婷五月天嫩女| 色五婷婷| 色小说五月婷婷| 五月天婷婷自拍图片在线观看| 色色爽爽天天| 综合性爱网| 丁香五月婷婷婷桃花影院| 丁香五月天AV在线 | 色黑鬼导航| 99视频内射三四| 日本久久婷婷| 91热视频色网站| 久久婷婷丁香五月宗合| 五月天丁香欧美激情| 日韩一级| 丁香亭亭激情四射| 亚洲美女裸体被操在线观看| 日本色色影片| 亚洲妇女熟BBW| 欧美电影在线播放| 狠狠综合网| 婷婷五月天成人网| 91色色色| 五月丁香啪啪网| 99久久网站| 色播播五月天| 99久久婷婷国产综合精品草原| 九九色综合| 亚洲AV成人在线| 丁香五月天啪啪| 亚洲色五月| 思思热99热| 亚洲色婷婷五月天| 五月婷婷激情| 国产精品电影| 青草视频在线观看视频| 免费久久这里只有精品99| 免费日韩99| 色五月开心五月激情五月| 婷婷成人在线| 天天干天天玩天天夜天天射天天操天天日蜜臀少妇 | 婷婷五月开心中文字幕在线| 亚洲五月天狠狠| 狠狠五月激情婷婷直播片| 狠狠色婷婷六月激情网| 51avj视频大全| 丁香五月婷婷AV在线| 国产激情在线| 五月丁香六月婷综合成人综合| 五月激情婷婷丁香| 狠狠操综合| 成人片黄网站色大片免费毛片| 国产内射婷婷| 色婷婷综合电影| 999激情视频| 这里只有精品偷拍| 丁香五月天欧美在线| 四色AVwww| 五月天婷婷视频小说| 99色干| AA丁香综合激情| 久久久婷婷五月天| 精品99在线观看| 91久久婷婷| 久久这里只有精品无码| 五月天综合激情网| 新97人人上人人| 99热这里有精品| www.婷婷五月.com| 9久久久久| 成人色五月天| 成人五月天视频| 级情九色| 色哟呦av| 玖玖在线| 伍月激情天| 天天摸天天透天天舔| 99操碰| 精品香蕉99久久久久网站| 精品动漫 无码av| 丁香婷婷黄网站| 天天综合图片| 99九九视频精彩在线| 丁香婷婷色五月| 欧美激情 日韩无码 婷婷 五月天| 色碰碰| 啪啪激情网站| 97操碰视频| 99热99艹在线观看| 久久香蕉福利| 婷婷六月天激情影院| 玖玖爱资源站| 丁香五月花影院| 99热综合网| 久久婷婷亚洲五月天| www.91操| 婷婷五月天成人视频| 五月丁香啪啪网| 五月婷婷在线观看| 婷婷狠狠操| 综合99在线| 婷婷免费成人视频| 玖玖99免费视频| 久久九九激情五月天| www.99热视频| 婷婷五月天综合小说网| 久久久噜噜噜久久人妻| 五月婷婷综合性爱噜噜| 一根材五月婷成人| 9 1超碰九色| 96精品国产综合久久久久久| 97色色色视屏| 99热新网址| 丁香五月激情综合久久| 99这里有精品免费| 影音先锋一区| 亚洲精品444久久久久久| 激情丁香淫荡婷婷| 91超级碰碰碰| 日本视频欧美观看免费| 九九热手机在线视频| 俺去也五月天| 丁香五月另类色婷婷麻豆| 亚洲第一成人AV| 五月丁香激情片| 亚洲av网站在线观看| 色综啪啪啪啪啪啪| 婷婷五月天日日日干干干| 狠狠色色| 六月色播| 婷婷中文字幕| 五月婷婷综合色啪首页| 天天射综合网天天插| 五月天国产| 欧美综合五月丁香六月婷| 久久九九热视频| a性生活久久无| 婷婷伊人激情婷婷| 97精品综合久久| 欧美日综合| 久久电影4399| 懂色av蜜臀av粉嫩av永陈冠希| 欧美激情综合色综合色| 草草女人亚洲| 操笔无码| 97色干| 五月天婷婷综合久久| 97视频91| 五月丁香欧美综合| 先锋资源婷婷| 国产黄色一级片| 久久99网| 久久99精品久久久| www,色色色网站| 人人综合色| 激情开心五月天婷婷基地丁香社区| 婷婷D区| 成人婷婷五月| 国产精品久久久久9999小说| 五月综合激情图片| 亚洲无AV在线中文字幕| 丁香六月婷婷高清| 少妇人妻丰满做爰XXX| 中文人妻主播久久| 色五月婷婷五月天| 丁香五月亭亭六月综合激情网| 国产亚洲色婷婷久久99精品91| 婷婷八月激情| 婷婷丁香六月天| 插插插色综合网| 日本操天堂| 色5月婷婷| 97操碰在线97| 婷香五月激情视频| 操碰久| 91婷婷搞| 激情综合啪啪啪| 激情五月激情综合网| 日日干夜夜撸夜夜骑| 国产精品久久久久9999小说 | 五月色丁香| 日本一级一级一级一级| 丁香五月天欧美成人| 国产精品久久久久久久久久久久 | 少妇AB又爽又紧无码网站| 亚洲无码成人性爰网| 99精品偷自拍| 色99热| 激情无码网| 久久伊人大香蕉| 激情五月天婷婷久久久久久久久久久| 八戒青柠影视剧在线观看| 婷婷丁香五月六月激情| 日本道久久91| 久久伦乱| WWW丁香五月| 激情五月综合网丁| 五月丁香六月色| 日韩无码成人电影| 九九色色| 人人人操97| 成人网站av免费网站推荐| 激情六月综合| 天天射综合网天天插| 久久机热探花| 亚洲操b| 久久草婷婷丁香网站| 免费啪啪啪网站| 99热久| 色五月婷婷婷婷| 久久久久婷 | 亚洲性天天| 天天日日| 超碰精品在线| 天天色天天舔天天爱天天爽| www.精品久9| 亚洲中文无码成人| 成人AV片播放| 婷婷伊人中文字幕| 天天干天天色天天干| www.久久爱.com| 大地资源色婷婷视频在线| 日本五月婷婷| 久婷婷五月丁香在线观看| 99re视频在线精品| 五月婷婷香| 激情网综合| 欧美日韩91| 在线五月婷| 99综合| 久久婷婷五月综合色丁香| 99啪啪视频| 婷婷黄色网| 五月婷视频| 婷婷五月天综合在线| 月月AV| 日亚二欧美| 国产熟妇乱子伦hd| 激情综合婷婷| 噜噜噜噜噜色| 狠狠色婷婷在线| 成人网站高清无码| 亚洲亚洲人成综合网络| 女人被男人吃奶到高潮| 色五月婷婷大| 操久久网| 人人超碰99| 国产又黄又爽又色的免费| 日本一级特黄大片AAAAA级| 丁香五月亚洲综合| 综合婷婷| 婷婷性爱视频在线| 91无码一区人妻A片蜜| 4399成人黄A片| 婷婷五月天激情文学| 人人舔人人色人人高潮| av久热| 牛牛色av| 久草婷婷在线| 午夜少妇在线观看视频| 色婷婷伊人| 亚洲另类视频| 伊人久久五月天| 思思视频精品| 五月丁香六月久久| 婷婷丁香九月| 超级碰碰碰91| 亚洲天堂AV综合网| 操操操97| 思思热在线观看| 色99视频| 五月丁香六月成人| 天天干夜夜谢| 色99欧洲色19| 99在线看片| 色七色九九| 国产成人+综合亚洲+天堂| 色情婷| 91精品视频男人的天堂| 婷婷香蕉精品| 日本人妻伦在线中文字幕| 激情五月婷| www激情| 超碰免费99| 九九热99熟女| 天天爱天天狠天天透| 婷婷丁香人妻天天| 天天肏天天爽夜夜爽| 色婷激情网| 亚洲综合视频一下| 色丁香在线视频| 噜噜综合网| 77799热| 五月天婷综合网站| 99re热精品视频国| 五月天婷婷基地丁香| 五月天激情综合在线| 激情综合五月丁香| 五月婷婷综合激情| 五月婷婷色色| 五月开心婷婷网| 欧美日韩一a.无| 色五月婷婷中文字幕在线观看| 大香蕉精品视频| 狠狠操综合| 99re熱| 99热99艹在线观看| 碰97 久| 天天久综合网永久入口18| 亚洲中文字幕在线观看| 欧美精品中文字幕亚洲专区| 欧美日本日韩| 免费在线观看AV网站| 婷婷六月天国产综合| WWW.HENHENL.| 久热天堂| 丁香六月婷婷综合欧美| 美欧日韩国产成人在战| 在线成人网站| 婷婷五月色花丁香社区| 婷婷五月激情丁香激情| 开心五月综合激情综合五月| 日本五月视频| 五月激情六月综合| 五月天伊人综合| 日本三级黄色大片| 91操人视频| 精品国产一区二区三区四区阿崩 | 激情久久久| 蜜乳av一级av| 91超级碰人人操| 日本系列_4页_777FP| 五月丁香A片| 五月综合777| 婷婷成人五月天成人文学小说| 五月婷婷在线视频观看| 婷婷五月激情图片| 婷婷五月天成人| 《亚洲操B久久免费在线观看,亚洲操B久久在线播放》在线播放 - 高清资源 - 97 | 99热99网| 五月天婷婷丁香视频| 99re思思热久久| 久久久久久激情| 五月天婷婷激情| 亚洲视频在线网| 99综合自拍| 爱之国产色情综合| 丁香五月六月激情久久| 欧美日韩成人在线网站| 国产成人+综合亚洲+天堂| 碰超亚洲| 久婷婷婷| www.操逼comm| 性综合网| 激情综合久久| 9精品一区| 亚洲综合无码| 丁香五月天人体| 五月婷婷人妻| 99精品国产热久久91色欲| 婷综合| 精品九九视频| 人妻久热| 国产乱人偷精品人妻A片| 色99无码| 99在线观看亚洲| 欧美成人五月天| 久久99久久99久久99人受| 99精品丁香五月| YJLZZJLZZ亚洲乱熟无码| 天天拍久久| 在线另类视频| 九九九激情综合| 国产ava| 亚洲精品五月| AV在线免费网站| 色欲久久99精品久久久久久| 久久久999精品| 丁香五月婷婷综合网| 成人在线日韩| 3DAV亚洲香蕉久久 一区二区| 婷婷五月天在线看| 99热99热在线| 久久久久久久人妻| 久久婷视频| 五月丁香花免费视频| 狠狠爱综合网| 日日操夜夜操中国无码| 狠狠操.com| 九九综合| 久久5 9视频免费观看| 九九精品视频免费在线| 色五月婷婷很很操| 欧美成人AAA片一区国产精品 | 丁香五月天在线| 99久re热视频精品98| 九九人人自拍| 丁香五月,激情五月,深爱五月| 婷婷久久色| 成人在线网站| 色婷婷综合网站| 另类图片五月天| 天天射美女| 少妇综合网| 97干在线视频精品店| 五月天婷婷六月激情网| 久热99热| 99热黄| 五月丁香婷婷人体| 五月婷婷丁香| 色婷婷操逼| 婷婷成人AV| 色吧网综合| 六月丁香婷婷尤物| 激情深爱五月天| 亚洲天堂爱爱| 99操免费视频| 9999综合99综合人| 天天日日爽| 狠狠CAO日日穞夜夜穞AV| site:901-07.com| 色婷婷导航| 九月婷婷色色| 丁香五月婷婷AV在线| 婷婷丁香五月在线观看91| 丁香五月98| 丰满女老板BD高清A片| 99热综合在线| www超碰| 色五月丁香婷婷综合| 欧美精品999| 色丁香五月| 五月天伊人| 狠狠色网| 丁香五月婷婷网| 五月丁香偷拍| 丁香六月激情国产| 中文字幕成人版| 五月丁香花开综合网| 国产AV影片| 五月噜噜| 高清资源站日A美A欧亚…| 五月丁香六月欧美综合| 9l视频自拍9l九色成人| 丁香婷婷久久| 俺去也综合| 99 热国产在| 久久丁香五月天| 99热欧美在线观看| 丁香五月激情综合| 成人精品一区二区三区四区五区 | 99热这里有精力| 综合激情五月天| 九九色热| 三区激情四射av| 精品无码久久久久久久久| 人人天堂操| 猫咪伊人AV| 熟女激情五月天| 99热天堂| 淫视馆aV二区一区| www.99热日韩.com| 国产人妻人伦精品一区二区| 日日操日日干| 亚洲成人av中文| 亭亭玉月丁香| 亚洲不卡| 激情五月天视频| 色高清无码视频| 高清免费在线视频| 欧洲色| 成人在线网| 国产精产国品一二三在观看 | 日韩成人网址| 六月丁香啪啪啪| 九九热在这里只有精品| 丁香五月久久社区| 影视av久久久噜噜噜噜噜三级| 五月婷婷啪啪| 国产精品久久久久久久久久久久| 精品皮股午夜AV| 日韩精品电影| 亚洲网视屏| 《战争与艾拉》完整版| a性生活久久无| 九九热免费视频| 五月天激情国产综合婷婷婷就去爱| 国产亚洲成AV人片在线观黄桃| 五月丁香婷婷激情澎湃四射| 婷婷终合色图| 99亚州综合精品成人网| 亚洲无码成人性爰网| 九月av在线| 性色五月天| 天天日日爽| 亚洲AV中文在线| 少妇熟女视频一区二区三区| 综合婷婷五月丁香在线观看| 九洲一级A片| 国产真实乱了老女人视频| 夜夜操天天干| 色色精品色| 久久日婷婷| www色色com| 五月婷婷六月奇米网丁香| 日韩精品超碰在线观看| 97色婷婷| 色色色综合色| 看黄的网站18禁| 激情婷婷五月综合| 日韩aaaaa| 激情小说视频图片网| www.狠狠| 天天综合色99| www.婷婷六月天| 思思热视频在线|