亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

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

【C++標準項目】發(fā)布訂閱式消息隊列(篇二):C++ 第三方庫實戰(zhàn):Protobuf 與 Muduo 從原理到上手

【C++標準項目】發(fā)布訂閱式消息隊列(篇二):C++ 第三方庫實戰(zhàn):Protobuf 與 Muduo 從原理到上手 先看全景這兩個庫在項目里各自站哪個位置一個典型的 C 網絡服務比如消息隊列、RPC 框架、游戲網關骨架大致是三層Protobuf 是協(xié)議層的答案你用.proto描述數(shù)據(jù)結構編譯器給你生成 C 類序列化出來是緊湊的二進制跨語言、跨平臺、可向后兼容地演進。Muduo 是傳輸層的答案陳碩寫的非阻塞 IO 事件驅動網絡庫主從 Reactor 模型one loop per thread讓你用「注冊回調」的方式寫高并發(fā) TCP 服務而不用手寫epoll那套狀態(tài)機。兩者組合起來就是一個能對外提供穩(wěn)定二進制協(xié)議服務的最小工業(yè)級骨架。下面分兩大塊講。第一部分Protobuf1.1 Protobuf 是什么Protocol Buffers簡稱 Protobuf / PB是一套數(shù)據(jù)結構序列化與反序列化框架。三個核心特點特點含義語言無關、平臺無關一份.proto可生成 Java / C / Python / Go 等多語言代碼天然支持跨端通信高效二進制編碼 變長整數(shù)編碼比 XML 更小、更快、更簡單典型場景體積約為 JSON 的 1/3 ~ 1/10擴展性、兼容性好可以往 message 里加字段而不破壞已經上線的舊程序——這是它能做長期協(xié)議演進的根本原因為什么加字段不破壞舊程序能成立這是 PB 最值錢的設計值得單獨說清楚每個字段都有唯一編號編碼進字節(jié)流的是編號不是字段名新版本增加的新編號舊程序解析時不認識就跳過skip不會報錯舊程序發(fā)的數(shù)據(jù)缺少新字段新程序讀到的是字段默認值proto3 中標量默認是 0 / 空串 / false。所以協(xié)議演進的原則是只加不減、不換類型、不復用編號。1.2 Protobuf 使用流程標準三步走1. 寫 .proto 文件 定義 message 及其字段 ↓ 2. protoc 編譯 .proto 生成 xxx.pb.h / xxx.pb.cc ↓ 3. 在業(yè)務代碼里 include 用生成的類 set/get 字段、序列化、反序列化可以理解為.proto是協(xié)議源碼protoc是協(xié)議編譯器.pb.h/.pb.cc是協(xié)議 SDK。改協(xié)議 改.proto重新編譯業(yè)務代碼跟著編永遠不存在手寫解析函數(shù)寫漏一個字段的問題。下面用一個通訊錄 Demo把這套流程完整跑一遍。1.3 快速上手通訊錄 DemoDemo 目標很樸素但足以覆蓋全部關鍵動作對一個聯(lián)系人信息用 PB 序列化拿到二進制結果把二進制結果用 PB 反序列化解析出聯(lián)系人信息聯(lián)系人字段姓名 年齡。Step 1創(chuàng)建.proto文件命名規(guī)范文件名全小寫多個單詞用_連接例如lower_snake_case.proto??s進規(guī)范文件內代碼統(tǒng)一2 個空格縮進不是 4 個這是官方風格。新建contacts.proto。Step 2加注釋支持//單行與/* ... */多行和 C 一致。Step 3指定 proto3 語法syntax proto3;proto3 是當前最新的語法版本簡化了 proto2 的寫法且必須寫在除去注釋后的第一行不寫這行編譯器默認按proto2解析——很多為什么生成代碼里多了一堆has_xxx()的疑惑都源于此。Step 4package聲明可選但強烈建議package contacts;package表示.proto的命名空間用來避免不同模塊間 message 重名沖突編譯成 C 后它會變成同名的 namespace即contacts::PeopleInfo項目里要有唯一性通常用「項目名.模塊名」的層級寫法如package mq.common;。Step 5定義 message消息message就是我們要傳輸?shù)慕Y構化對象。在網絡里雙方必須先定制協(xié)議——說白了就是約定結構體長什么樣PB 用message來承載這件事并據(jù)此幫你生成類和方法。message 消息類型名 { }命名規(guī)范駝峰命名首字母大寫。syntax proto3; package contacts; // 定義聯(lián)系人消息 message PeopleInfo { }Step 6定義消息字段字段格式字段類型 字段名 字段唯一編號;三條規(guī)范務必記住字段名全小寫多個單詞用_連接snake_case字段類型分為標量數(shù)據(jù)類型int32 / string …和特殊類型枚舉、其他 message 等字段唯一編號用來標識字段一旦投入使用就不能改改了等于換了字段。標量類型對照表以 C 為例.proto Type說明C Typedouble8 字節(jié)浮點doublefloat4 字節(jié)浮點floatint32變長編碼。負數(shù)的編碼效率較低——字段可能為負時應用sint32int32int64變長編碼。負數(shù)的編碼效率較低——字段可能為負時應用sint64int64uint32變長編碼uint32uint64變長編碼uint64sint32變長編碼符號整型負值編碼效率高于int32int32sint64變長編碼符號整型負值編碼效率高于int64int64fixed32定長 4 字節(jié)。值常大于 2sup28/sup 時比uint32更高效uint32fixed64定長 8 字節(jié)。值常大于 2sup56/sup 時比uint64更高效uint64sfixed32定長 4 字節(jié)int32sfixed64定長 8 字節(jié)int64bool布爾boolstringUTF-8 / ASCII 字符串長度不超過 2sup32/supstd::stringbytes任意字節(jié)序列長度不超過 2sup32/supstd::string關于變長編碼Varint經過 PB 編碼后原本需要 4 字節(jié)或 8 字節(jié)的數(shù)可能只占 1~2 個字節(jié)。 這就是為什么int32 age 20;編碼出來只有一個字節(jié)——小數(shù)值極其省空間。 而負數(shù)在 Varint 里會被當作 64 位補碼處理固定占 10 個字節(jié)所以可能為負的字段一定優(yōu)先選sint32/sint64。另注bytes在 C 里同樣映射為std::string但語義是裸字節(jié)不要直接當文本用。更新contacts.proto加入姓名與年齡syntax proto3; package contacts; message PeopleInfo { string name 1; int32 age 2; }字段編號的兩個硬性約束A. 取值范圍1 ~ 536,870,911即 2sup29/sup ? 1其中 19000 ~ 19999 不可用。19000~19999 是 PB 協(xié)議實現(xiàn)內部預留的。硬寫上去編譯期就會告警// 消息中定義了如下編號代碼會告警 // Field numbers 19,000 through 19,999 are reserved for the protobuf implementation string name 19000;B. 1 ~ 15 編號只占 1 個字節(jié)16 ~ 2047 占 2 個字節(jié)。編碼后的字節(jié)不僅包含編號還包含字段類型wire type。所以1 ~ 15 應該留給出現(xiàn)最頻繁的字段同時為將來可能新增的高頻字段預留幾個低編號。這是一條協(xié)議設計時就要想清楚的性能約束不是編譯器會幫你兜底的東西。Step 7編譯contacts.proto命令行格式protoc [--proto_pathIMPORT_PATH] --cpp_outDST_DIR path/to/file.proto參數(shù)含義參數(shù)說明protocProtocol Buffers 提供的命令行編譯工具--proto_path/-I指定被編譯.proto文件所在目錄可多次指定。不指定則默認在當前目錄搜索。當.proto之間互相import或被編譯文件不在當前目錄時必須用-I--cpp_outOUT_DIR指定生成C代碼以及輸出目標目錄path/to/file.proto要編譯的.proto文件編譯我們的通訊錄protoc --cpp_out. contacts.proto生成兩個文件contacts.pb.h // 類的聲明 contacts.pb.cc // 類的實現(xiàn)生成代碼的整體規(guī)律每個message→ 生成一個對應的消息類類里為每個字段提供getter / setter以及一系列操作字段的方法每個.proto文件 → 一對.h/.cc聲明與實現(xiàn)分離。Step 8讀懂生成的代碼contacts.pb.h片段class PeopleInfo final : public ::PROTOBUF_NAMESPACE_ID::Message { public: using ::PROTOBUF_NAMESPACE_ID::Message::CopyFrom; void CopyFrom(const PeopleInfo from); using ::PROTOBUF_NAMESPACE_ID::Message::MergeFrom; void MergeFrom(const PeopleInfo from) { PeopleInfo::MergeImpl(*this, from); } static ::PROTOBUF_NAMESPACE_ID::StringPiece FullMessageName() { return PeopleInfo; } // string name 1; void clear_name(); const std::string name() const; template typename ArgT0 const std::string, typename... ArgT void set_name(ArgT0 arg0, ArgT... args); std::string* mutable_name(); PROTOBUF_NODISCARD std::string* release_name(); void set_allocated_name(std::string* name); // int32 age 2; void clear_age(); int32_t age() const; void set_age(int32_t value); };命名規(guī)律一目了然getter名稱與字段名完全相同小寫如name()、age()setter以set_開頭如set_name()、set_age()每個字段都有clear_方法把字段重置回 empty 狀態(tài)字符串字段額外有mutable_/release_/set_allocated_用于避免拷貝或轉移所有權——mutable_name()返回可直接修改的內部指針級對象這是高頻修改字符串時唯一不產生拷貝的入口。contacts.pb.cc中是這些方法的具體實現(xiàn)通常不需要看。序列化 / 反序列化 API 在哪不在消息類自己身上而在其父類MessageLite中class MessageLite { public: // 序列化 bool SerializeToOstream(ostream* output) const; // 寫入文件流 bool SerializeToArray(void* data, int size) const; bool SerializeToString(string* output) const; // 反序列化 bool ParseFromIstream(istream* input); // 從流讀取再反序列化 bool ParseFromArray(const void* data, int size); bool ParseFromString(const string data); };四個要點序列化結果是二進制字節(jié)序列不是文本格式三個序列化方法沒有本質區(qū)別只是輸出載體不同流 / 裸內存 / string按場景選序列化 API 都是const成員函數(shù)——序列化不改變對象內容只把結果寫到入參指定的地址更完整的 message API 見官方 Message 完整列表。Step 9序列化與反序列化的實際使用運行結果第二部分Muduo2.1 Muduo 是什么解決什么問題Muduo 是陳碩開發(fā)的、基于非阻塞 IO 與事件驅動的 C 高并發(fā) TCP 網絡編程庫。它解決的是手寫網絡服務的經典痛點裸用epoll時你得自己管理fd生命周期、處理EAGAIN/短讀短寫、維護每連接的緩沖區(qū)、處理跨線程喚醒……任何一個細節(jié)寫錯都是線上事故。Muduo 把這一整套封裝成注冊回調 事件循環(huán)的編程模型。2.1.1 主從 Reactor 模型main Reactor只有一個專職accept新連接然后把連接分發(fā)給某個 sub Reactorsub ReactorN 個各自跑在自己的線程里負責已建立連接的讀寫事件與業(yè)務回調。2.1.2one loop per thread線程模型的核心約定一個線程只能有一個事件循環(huán)EventLoop用于響應計時器和 IO 事件一個文件描述符只能由一個線程進行讀寫——換句話說一個 TCP 連接必須歸屬于某個 EventLoop 管理。這條約定的工程價值因為連接只屬于一個 loop業(yè)務回調天然是單線程串行執(zhí)行的。 你在onMessage里操作連接自己的狀態(tài)時不需要加鎖 需要跨線程操作時Muduo 提供runInLoop/queueInLoop把任務丟回目標 loop 執(zhí)行這也是定時器能線程安全地從其他線程調用的原理。并發(fā)難點從到處鎖變成了想清楚哪些變量屬于哪個 loop這是 Muduo 最舒服的地方。2.2 五個必須掌握的核心類類職責一句話記住InetAddress封裝 IP 端口描述哪個地址EventLoop事件循環(huán)epoll的封裝驅動一切的心臟TcpServerTCP 服務器服務端入口負責 accept 分發(fā)TcpClientTCP 客戶端客戶端入口負責 connectTcpConnection一條TCP 連接收發(fā)數(shù)據(jù)都通過它Buffer每連接的讀寫緩沖區(qū)解決數(shù)據(jù)沒到齊/發(fā)不完CountDownLatch倒計時門閂把異步連接同步化2.2.1TcpServertypedef std::shared_ptrTcpConnection TcpConnectionPtr; typedef std::functionvoid (const TcpConnectionPtr) ConnectionCallback; typedef std::functionvoid (const TcpConnectionPtr, Buffer*, Timestamp) MessageCallback; class InetAddress : public muduo::copyable { public: InetAddress(StringArg ip, uint16_t port, bool ipv6 false); }; class TcpServer : noncopyable { public: enum Option { kNoReusePort, kReusePort, }; TcpServer(EventLoop* loop, const InetAddress listenAddr, const string nameArg, Option option kNoReusePort); void setThreadNum(int numThreads); // 設置 sub Reactor 線程數(shù) void start(); // 啟動創(chuàng)建監(jiān)聽 socket 并注冊進 loop /// 當一個新連接建立成功的時候被調用 void setConnectionCallback(const ConnectionCallback cb) { connectionCallback_ cb; } /// 消息的業(yè)務處理回調函數(shù)——收到新連接消息的時候被調用 void setMessageCallback(const MessageCallback cb) { messageCallback_ cb; } };要點三個入參用哪個 loop、監(jiān)聽地址、服務器名日志標識setThreadNum(n)設置 sub Reactor 數(shù)量n 0就是單線程模式所有 IO 都在 main loop 里setConnectionCallback參數(shù)只有 1 個連接對象setMessageCallback參數(shù)有 3 個連接對象、Buffer、時間戳——這是新手最常見的編譯錯誤來源kReusePort設置SO_REUSEPORT服務器重啟不必等TIME_WAIT超時調試期建議開。2.2.2EventLoopclass EventLoop : noncopyable { public: /// Loops forever. /// Must be called in the same thread as creation of the object. void loop(); /// Quits loop. /// This is not 100% thread safe, if you call through a raw pointer, /// better to call through shared_ptrEventLoop for 100% safety. void quit(); TimerId runAt(Timestamp time, TimerCallback cb); /// Runs callback after c delay seconds. Safe to call from other threads. TimerId runAfter(double delay, TimerCallback cb); /// Runs callback every c interval seconds. Safe to call from other threads. TimerId runEvery(double interval, TimerCallback cb); /// Cancels the timer. Safe to call from other threads. void cancel(TimerId timerId); private: std::atomicbool quit_; std::unique_ptrPoller poller_; // 對 epoll 的封裝 mutable MutexLock mutex_; std::vectorFunctor pendingFunctors_ GUARDED_BY(mutex_); };要點loop()是死循環(huán)阻塞接口必須與創(chuàng)建該對象的線程相同線程歸屬約定quit()用來退出定時器三件套runAt絕對時間、runAfter延遲一次、runEvery周期注意線程安全注釋定時器接口是可從其他線程安全調用的實現(xiàn)方式就是把回調queueInLoop到目標 looppendingFunctors_mutex_就是跨線程任務的落地機制也是eventfd喚醒epoll_wait的觸發(fā)點GUARDED_BY(mutex_)是 clang 線程安全注解告訴靜態(tài)分析這個成員必須在持鎖下訪問。2.2.3TcpConnectionclass TcpConnection : noncopyable, public std::enable_shared_from_thisTcpConnection { public: /// Constructs a TcpConnection with a connected sockfd /// User should not create this object. TcpConnection(EventLoop* loop, const string name, int sockfd, const InetAddress localAddr, const InetAddress peerAddr); bool connected() const { return state_ kConnected; } bool disconnected() const { return state_ kDisconnected; } void send(string message); // C11 void send(const void* message, int len); void send(const StringPiece message); // void send(Buffer message); // C11 void send(Buffer* message); // this one will swap data void shutdown(); // NOT thread safe, no simultaneous calling void setContext(const boost::any context) { context_ context; } const boost::any getContext() const { return context_; } boost::any* getMutableContext() { return context_; } void setConnectionCallback(const ConnectionCallback cb) { connectionCallback_ cb; } void setMessageCallback(const MessageCallback cb) { messageCallback_ cb; } private: enum StateE { kDisconnected, kConnecting, kConnected, kDisconnecting }; EventLoop* loop_; ConnectionCallback connectionCallback_; MessageCallback messageCallback_; WriteCompleteCallback writeCompleteCallback_; boost::any context_; };要點不要自己 newTcpConnection——它由TcpServer/TcpClient內部創(chuàng)建用shared_ptr管理生命周期繼承enable_shared_from_this回調里需要續(xù)命時用shared_from_this()拿到shared_ptr避免對象在使用中被析構send()是線程安全的內部會runInLoop到所屬 loop 執(zhí)行可從任意線程調用shutdown()不是線程安全的且不能同時調用——這是注釋里明確寫的限制context_是boost::any類型的每連接用戶數(shù)據(jù)槽做連接級會話狀態(tài)用戶 ID、登錄態(tài)、解析中間態(tài)的標準位置四個連接狀態(tài)kDisconnected / kConnecting / kConnected / kDisconnecting業(yè)務里用connected()/disconnected()判斷即可。2.2.4TcpClientclass TcpClient : noncopyable { public: TcpClient(EventLoop* loop, const InetAddress serverAddr, const string nameArg); ~TcpClient(); // force out-line dtor, for std::unique_ptr members. void connect(); // 連接服務器 void disconnect(); // 關閉連接 void stop(); // 獲取客戶端對應的通信連接 Connection 對象 // 注意發(fā)起 connect 后有可能還沒有連接建立成功 TcpConnectionPtr connection() const { MutexLockGuard lock(mutex_); return connection_; } /// 連接服務器成功時的回調函數(shù) void setConnectionCallback(ConnectionCallback cb) { connectionCallback_ std::move(cb); } /// 收到服務器發(fā)送的消息時的回調函數(shù) void setMessageCallback(MessageCallback cb) { messageCallback_ std::move(cb); } private: EventLoop* loop_; ConnectionCallback connectionCallback_; MessageCallback messageCallback_; WriteCompleteCallback writeCompleteCallback_; TcpConnectionPtr connection_ GUARDED_BY(mutex_); };注意Muduo 不管服務端還是客戶端連接動作都是異步的。/* 因為 muduo 庫不管是服務端還是客戶端都是異步操作 對于客戶端來說如果我們在連接還沒有完全建立成功的時候發(fā)送數(shù)據(jù) 這是不被允許的。 因此我們可以使用內置的 CountDownLatch 類進行同步控制。 */connect()只是發(fā)起連接就返回了connection()可能還是空的。要連上再發(fā)就得用CountDownLatch把異步變同步class CountDownLatch : noncopyable { public: explicit CountDownLatch(int count); void wait() { MutexLockGuard lock(mutex_); while (count_ 0) { condition_.wait(); // 等待方阻塞直到計數(shù)歸零 } } void countDown() { MutexLockGuard lock(mutex_); --count_; if (count_ 0) { condition_.notifyAll(); // 通知方歸零時喚醒所有等待者 } } int getCount() const; private: mutable MutexLock mutex_; Condition condition_ GUARDED_BY(mutex_); int count_ GUARDED_BY(mutex_); };用法就是經典的主線程 waitIO 線程在onConnection里 countDownCountDownLatch latch(1);→latch.wait();卡住 → 連上后回調里latch.countDown();→ 主線程被喚醒此刻連接一定可用了。注意條件的檢查方式是while (count_ 0)而非if——這是防虛假喚醒的標準寫法自己寫條件變量時照抄。2.2.5Bufferclass Buffer : public muduo::copyable { public: static const size_t kCheapPrepend 8; static const size_t kInitialSize 1024; explicit Buffer(size_t initialSize kInitialSize) : buffer_(kCheapPrepend initialSize), readerIndex_(kCheapPrepend), writerIndex_(kCheapPrepend) {} void swap(Buffer rhs); size_t readableBytes() const; // 可讀字節(jié)數(shù) size_t writableBytes() const; // 可寫字節(jié)數(shù) const char* peek() const; // 可讀數(shù)據(jù)的起始位置 const char* findEOL() const; // 找 \n解析文本協(xié)議常用 const char* findEOL(const char* start) const; void retrieve(size_t len); // 消費 len 字節(jié) void retrieveInt64(); void retrieveInt32(); void retrieveInt16(); void retrieveInt8(); string retrieveAllAsString(); // 取走全部可讀數(shù)據(jù) string retrieveAsString(size_t len); void append(const StringPiece str); void append(const char* /*restrict*/ data, size_t len); void append(const void* /*restrict*/ data, size_t len); char* beginWrite(); const char* beginWrite() const; void hasWritten(size_t len); // 讀完之后告知我寫了 len 字節(jié) void appendInt64(int64_t x); // 網絡字節(jié)序寫入 void appendInt32(int32_t x); void appendInt16(int16_t x); void appendInt8(int8_t x); int64_t readInt64(); // 網絡字節(jié)序讀出 int32_t readInt32(); int16_t readInt16(); int8_t readInt8(); int64_t peekInt64() const; // 只看不消費 int32_t peekInt32() const; int16_t peekInt16() const; int8_t peekInt8() const; void prependInt64(int64_t x); // 前插常用于把長度頭補回前面 void prependInt32(int32_t x); void prependInt16(int16_t x); void prependInt8(int8_t x); void prepend(const void* /*restrict*/ data, size_t len); private: std::vectorchar buffer_; // 底層存儲 size_t readerIndex_; // 讀位置 size_t writerIndex_; // 寫位置 static const char kCRLF[]; };設計要點readerIndex_ / writerIndex_ 雙指針把vector分成已讀廢棄區(qū) | 可讀數(shù)據(jù)區(qū) | 可寫空閑區(qū)三段避免每次讀都erase搬內存kCheapPrepend 8前面預留 8 字節(jié)廉價空間用于prepend補協(xié)議頭如長度字段而不用整體搬移kInitialSize 1024初始 1KB按需擴容這點很關鍵TCP 是字節(jié)流一次read不保證拿到一條完整消息Buffer 就是用來攢夠一條消息的appendInt32/readInt32系列自動做網絡字節(jié)序轉換自定義二進制協(xié)議時直接用它寫長度前綴比手寫htons安全retrieve 消費數(shù)據(jù)移動readerIndex_peek 看一眼不消費注意區(qū)分這是解析消息時最容易寫錯的地方。2.3 快速上手英譯漢 TCP 服務端 / 客戶端用 Muduo 實現(xiàn)一個最簡單的英譯漢服務 客戶端發(fā)一個詞 → 服務端查字典 → 把譯文發(fā)回客戶端。2.3.1 服務端server.cpp幾個容易被忽略的細節(jié)成員聲明順序 構造順序_baseloop必須寫在_server前面因為_server構造時要用_baseloop。寫反了就是拿未初始化對象取地址行為未定義。InetAddress(port)這種只傳端口的寫法等價監(jiān)聽本機所有網卡要限定 IP 就寫InetAddress(0.0.0.0, port)。onMessage里msg.back()前應判空如果對端只發(fā)了連接不發(fā)數(shù)據(jù)或發(fā)來空包back()是 UB。生產代碼要寫成if (msg.empty()) return;。同樣這里用retrieveAllAsString()是假設一次收到一條完整消息的偷懶寫法真實協(xié)議必須自己按長度/分隔符做拆包配合findEOL()或readInt32()長度前綴。send()不保證立刻發(fā)出內核發(fā)送緩沖區(qū)滿時數(shù)據(jù)會留在 Muduo 的輸出 Buffer 里等EPOLLOUT所以別在send()后立刻假設對端已收到。2.3.2 客戶端client.cpp客戶端設計的三個關鍵點EventLoopThread客戶端通常沒有 main loop 需求用一個EventLoopThread起一個后臺線程跑 loop主線程就可以自由地做cin、等待等阻塞操作同時_baseloop上的 IO 照常進行。 成員聲明順序上_loopthread必須在_baseloop之前、_baseloop必須在_client之前_baseloop(_loopthread.startLoop())才能拿到合法的 loop 指針。CountDownLatch才是主角_client.connect()是異步的直接send會被 Muduo 拒絕或丟數(shù)據(jù)。構造函數(shù)里_connect_latch(1)→connect()里wait()→onConnection里countDown()三步把連接成功這件事變成一次確定的同步點。_conn的生命周期onConnection斷開分支里_conn.reset()translate里if (_conn)兜底判空——連接還沒建好或已斷開時只能安全地什么都不發(fā)。2.3.3 編譯Makefile運行效果
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
国产精品一区二区校花| 欧美在线视频观看一二三四区高清| 婷婷爽人人婷婷爽视频| 亚洲国内精品成人不卡| 中文字幕一区 二 区 三 四 五 区日 日 骚| 欧洲亚洲国产综合在线| 美女黄网| 欧美不在线| 99蜜桃臀亚洲成人在线观看| 久久久久久性爱片| 人人摸人人干| 色丁香五月婷婷| 亚洲熟女精品| 国产精品一区av在线| 午夜在线播放| 97在线播放| 亚洲一二三| 天天摸,夜夜摸| 日本午夜福利影院| aaaa少妇高潮大片| 天天做日日做天天欢。| 懂色AV蜜臀无码精品APP| 久久久久久久九九九九九九| 免费看黄片现成| 欧美宗合网| 夜夜嗨老熟女AV一区二区三区| 美女久久久久久久| 精品免费1| 人、人、摸,人、人、草| 欧美一二三级精品在线| 在线αⅴ| 18禁无码永久免费无限制| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区 | 五月丁香成人网| 一起草精品人妻| 亚瑟国产精品久久无码| 精品久热| 欧美操逼一二三区| 大香蕉伊人亚洲| 九九热免费视频| 狠狠穞A片一區二區三區| 3d成人精品一区二区| 另类图片欧美激情综合| 久久 国产 无码| 欧美gv在线观看| 久久久97| 日韩无码操逼片| 色综合V| 色欲av国内精品久久久久久| 国产福利电影| 8050无码八戒| 2010男人的天堂| 欧美 亚洲 综合 制服| 人人色97| 夜夜草天天| 性爱综合一区二区| 中文字幕狠狠玩| 柠檬AV导航| 日韩AV电影网站| 99re3这里只有精品| 欧美日韩情色一区二区| 欧美 亚洲 另类 综合| 亚洲熟妇综合久久久久久| 日本 情色 1区2区3区| 日韩精品一区,二区 九九...老司机| 日韩av色图| 色欲久久99精品久久| 久9爱精品| 久久成年片色大黄全免费网站| 无码高清少妇久久| 国产女人成人精品视频| 好一吊区二区| 黄色无码高清黄色无码网站| 青娱乐国产精品| 免费久久精品麻豆一区二区av| 久99| 另类专区加勒比| 91丝袜| 黑人白女精品一区| 欧美亚州手机在线| 欧洲大香蕉| 一区二区三区视频| 午夜福利视频在线一区| 久久婷婷一区二| 大奶尤物鲍汁淫荡欧美视频粉嫩夜夜骚| 日本熟妇精品九九| 天堂69亚洲精品中文字| 久久女婷| rivers-china.com| 精品一区二区成人| 97精品一二区| 91青青在线| 婷婷午夜成人色中色| 超碰亚洲97| 亚洲999综合| 97免费在线| 亚洲欧美在线观看免费| 亚洲宗合电影| 香蕉视频欧美一卡二卡| 丁香九月激情啪| 天天日天天舔东京热| 久久久久久999| 天天干天天日天天射黄色片| 亚洲在饯| 日本三级日本三级99| 亚洲限制级| 国产精品不卡高清在线观看| 久久久五月天| 亚洲色图片区| 日韩不卡毛片Av免费高清| 久久鲁夜| 日韩中文字幕精品一区在线| 久久水蜜臀亚洲AV无码精品| 婷婷色色五月天福利| 97五月天| 大香蕉综合网| 麻豆国产尤物AV| 国产av色网| 美女写真| 欧美在线天堂| 校园春色 男人天堂| 激情内射| 一区二区三区精品黑丝白丝酒店对鸡| 人妻丰满熟妇av无码区蜜桃| 欧美 亚洲 偷拍自拍| 九九人妻| 天美国产三级传媒| 日韩肏逼视频| 麻豆福利视频导航| 国产高清免费不卡av| 亚洲欧洲无码97久久精品| 人妻少妇久久中文字幕一区二区 麻豆 | 鲁鲁色综合网| 精品午夜福利导航| 久久不卡一区二区 | 精品国产乱码久久久久久影片| 99999国产精品| 91九久| 国产精品美女久久久久久网站| 大香蕉操久久| 爱妃国产亚洲视频中文字幕| 色综和网| 婷色五月天| 东京热一区二区中文字幕| 熟妇熟女亚洲天堂网| 97超碰久久| 欧美黑人与女人91~| 蜜乳中文字幕a在线| 用力操死我| 日本99一区二区| 精品九九国产无码| AV男人天堂网| 午夜激情床戏激情| 91成人久久| 91美女视频。| 亚州色图欧美| 国产免费大片| 男人a天堂手机在线版| 精人妻无码一区二区三区伊人直播| 首页中文字幕中文字幕免费| 亲子敌伦对白在线播放| 精品美女少妇一区二区三区| 九九热AV| 国产一区二区三区视频在线看| 少妇99| 熟女丰满人妻一区| 国产一级作爱毛片| 热思思免费视频| 欧美精品,四区。五区| 91丝袜美女| 男女激情黄色网址| 国产高清亚洲日韩一区| nuu12国产麻豆精品| 少妇高潮99p| 日韩国产乱子伦App| 婷婷激情四射| 精品天堂| 久久风骚城市| 天堂伊人久久| 99精品网站| 东京热激情视频一二三区| 亚洲高清无码在线桃色| 秋霞蝌科网日本一区| 天天干人人看综合| 女沟厕偷窥piss小便| 熟女露脸激情自拍视频| AV高清一区| 激情丁香五月| 日本中文字幕在线电影| 精品视频免费在线一区| 污色区网站| 日本色日夜干| 97ai亚洲| www.人人摸在线视频| 久久久久久久六六 | 日B操| 国产熟女精品一区二区| 婷婷20月天青娱乐| 日本道日本道中文字幕日本道最新日本道在线观看 | 欧美综合区| 国产区性爱在线视频秋霞豆| 草莓精品视频在线免费观看| 国产精品区在线12p| 中文字幕久久婷婷丁香五月天| 欧美性高潮| 欧美在线|亚洲| 亚洲精品欧洲精品| 97在线青| 玖玖无码超碰| 日韩精品 欧美激情| 麻豆区久久久久亚| 中文无线日韩一区| 四虎精品亚洲| 东北熟女91| 78m啪啪啪| 欧美大的香蕉有线电视视频| 人人操人人肉久久精品| 蜜臀久久99精品久久久久久婷婷| 综合网91| 久久精品中文字幕观看| 欧美视频中文字幕区| 久久av成人无码免费| 男人a天堂手机在线版| 国产 亚洲 丝袜 制服| 乱伦图一区| 成人性爱美曰韩| 日韩AV熟女乱伦| 在线国产探花| 97精品国产97久久久久久户外免费| 国产按摩一区二区三区| 亚洲综合99999| 青娱乐手机日韩在线视频| 天天综合网~91入口| 精久久久| 摸奶性爱视频网站在线免费播放| 粉嫩av在线一区二区| www超碰| 超碰公开久久网| 色老汉色| 天天综合中文字幕 91| 色噜噜狠狠色综无码久久合欧美| 国产AV色黄看到爽| 久久伊人五月天| 青青草自拍视频在线播放| 草伊人高潮喷水超碰| 97在线资源| 久久香蕉国产线看观看亚洲女人 | 久久久性爱| 立川理惠被中出无码| 在线免费观看日韩一区| 深爱五月婷婷| 操死我了啊啊啊| 99re欧美| 在线无码操| 夜夜操2028| 久久99草| 色综合久久av| 99自拍B亚洲 | 91在线综合网| 久久精品无码熟妇一区二区三区视频导航| 91丰满| 国产99精品一区二区三区免费| 黄色网址在线免费观看| 蜜臀久久99精品久久久久免费观| 一区二三区四区视频大全套| 日本免费中文字幕在线| 色五月婷婷麻豆在| WWW美腿丝袜香蕉中文| 久久人妻无码毛片A片麻豆| 69精品| 殴美大黄片| 中文字幕精品码亚洲| 日日夜夜摸| 精品一国2| 亚洲熟妇白浆无码AV| 搡老女人老91妇女老熟女| 成 人片 黄色大片| 青青草自拍视频在线播放| 亚洲天天精品| ji熟女.com| 五月天成人综合| 中文字幕超碰CAO| 熟女探花啪啪| 99自拍视频| 97超碰人操| 欧美成人免费在线观看| 久久怡红院| 国产精品视频| 国产一级高跟丝袜| 97爱欧美| 毛片一区二区| 久久久噜噜噜久久久| 我想要啊 啊 啊| 日欧操屄| av东京热男人的天堂| 亚洲精品97| 丝袜美腿诱惑亚洲欧美视频在线观看 | 超碰97人妻自拍| 影音先锋每日最新资源在线观看| 五月丁香影视| 香蕉精品二区二区| 丁香激情五月| 久久久久熟女| 国产精品爽爽v| 国产av热热色| 亚洲成A∨人影院在线欢看| 亚洲情色在线| 日韩精品一区二区日韩| 久久久工口| 人人贴人人摸| 亚洲色丰满少妇高潮| 日韩欧美大力操| av麻豆啪啪| 男女啪啪网站免费视频| 美女91在线观看| 亚洲色图尤物视频| 伊人96在线| 国产区91柔拿会所技师| 久啪| 99色天堂| 亚洲97在线| 91人妻丝袜无码| 精品久久久久久无码| 荡小穴在线观看| 色综合国产在线观看| 97日视频| 国产精品久久成人免费| 精品视频一二三中文| 高潮内射在线| 亚欧高清v| 丝袜综合网| 欧美嗯啊……在线观看视频免费| 飘花国产午夜精品不卡| 亚洲在钱| 加勒比日本在线| 国产色精品午夜大片| 爱丝福利| 欧美少妇大量自拍视频在线观看| 亚洲中文字幕熟女少妇一区二区| 玖玖草久草99蜜月一区二区三区| 久久久久国产精品片区无码直播| 久久东京热久久| 乱老熟女一区二区三区| 中文字幕av乱伦| 日产欧美电影一区二区三区| 日韩人人精品| 亚洲91色在线| 亚洲色欲天天人妻无码系列专区| 毛片一区二区| 久久久夜夜夜| 中文字幕人乱码中文字的预防方法| 日韩丝袜二区| 天天综合香 ld视频| 首页中文字幕中文字幕免费| 亚洲人精品久久久| 亚欧中文字幕在线视频| 婷婷综合激情| 色综合av男人天堂| 最新岛国大片| 9Ⅰ老熟女| 欧美最大综合网| baisiav| 国产精品无码在线| 日本一区二区三区免费观看| 欧美高清91| 亚洲丝袜B诱惑| 大香蕉视频一二三区| 97日韩超碰超碰中文字幕| 亚洲天堂人人妻| 久久熟女人| 熟女突然公开看18禁影片 | 伦理弟一页| 日韩人妻少妇 一区二区三区| 日本黄色大片一级视频免费麻豆| 任你干在线视频| 99.色网| 黄页大片在线观看| 国产毛片精品一区二区色欲黄A片| 亚洲国产av中文字幕久久| 神马麻豆福利院| 久久人妻一区二区三区高清 | 激情黄色片在线观看| 久久妇| 男生女生啊啊啊啊| 亚洲欧美中日韩| 亚洲综合小说另类图欧美视频激情小说色五月天| 收看日本人日bb| 欧美亚洲丝袜人妻制服中文99| 国产精品久久久久久久久AV大片| 国产精品午夜AV完会免费 | 亚洲97资源| 欧美一区二区三区成人性生活| 看看小穴| yazhousetuoumei| 国产成自自拍在线观看| 91色噜噜狠狠| 日韩超碰精品综合| 欧美婷婷久久| 国产免费一区| 91痴汉| 精品九九淫乱男| 欧美天天综合站| 久热久| 97在线视频观看免费| 亚洲精品97久久中文字幕| 99爱久久视频频| 日本欧美一区二区三区视频麻豆| 91在线视频免费中出| 97色冈| 97爱免费插| 日韩二三区| 欧美72网页| 欧美日韩婷婷中文| 久久9精品网站| 久久久九九九| 大香蕉www.超碰| 99国产在线 精品 视频| 秋霞免费AV| 2010男人的天堂| 97看操| 在线看片国产精品每日更新| 亚洲精品白浆高清久久久久久| 被男人吃奶很爽的毛片| 男人高清无码一区二区| 2019AV天堂| juliaann丝袜大战黑鬼| 女上位精品在线| 中文字幕一区二区无码成人| 日韩日本欧美在线观看| 日韩色欲久久一二三四区| 婷婷五月成人| 久久大线蕉一区| 超碰在线在公开超碰在线在公开| 96麻豆精品一区二区三区| 欧美日韩免费性爱| 日本片日本片祼观看网站在线看中文版网页在线看| 4141514逼喷水三级片| 亚洲免费97免费| 综合熟妇一区二区三区| 日韩电影在线观看网址| 精品久久无码午夜福利| 精品少妇一区二区三区在线视频| 黄色二级片网站| 屁股久久久久久久久| 在线小说视频一区| 欧美综合1性辶| 熟女乱3伦999| 久久久久久亚洲精品不卡人乳| 中文字幕一区二区三区蜜臀| 国产黑白丝在线| 奇米四色网| 六月丁香啪啪| 欧美特黄视频网站| 另类欧美色| 国产小黄片在线免费观看| 97精品国产97久久久久久免费| 色九九九综合| AV乱伦国产| 日韩高潮一区| asc国产精品| 国产精品 久久久精品一牛| 婷婷在线视频| 日夜尻逼网| WWW啪啪的com| 久久e6只有精品| 精品国产乱码久久久久久免费| 亚洲一区中文精品| 东北女人av| 亚洲欧美综合网 | 99色在线视频| 一二三四区电影| 国语精品内射在线观看| 98超碰日本| 7777奇米影视久久| 亚洲自拍欧美国产首页网曝| 国产成年女黄特黄| 9999久久久久| 丰满人妻-区二区三区免费看| 无码精品一区二区三区潘金莲| 欧美国产视频| 二男一女成人A片| 熟女欧美日韩综合婷婷| 欧美不卡在线一区二区| 久久av色| 青娱乐亚洲自拍| 天天看片麻豆| 午夜爽爽爽在线观看永久入口姬片| 日韩精品电影| 亚洲毛片基地专区| 亚洲91在线播放影院| 色丁香五月婷婷| 国产中午字一暮区| 欧美拳交在线播放| 91天天| 人人喜人人妻| 亚洲一区中文精品| www.男人天堂| 99精品久久久久久久婷婷蜜桃| 999久久久久久久久| 强奸乱亚洲| 精品无码少妇| julia国产在线 | 亚洲蜜桃V妇女| 91制服丝袜中文字幕| 大香交伊人网| 国产无码久久高清| 色九九综合AV| 每日更新AV| 超碰97伊人| 美女黄页| 国产精品久久99日日| 激情情色五月天| 中文字幕精品一区二区精品| 青春草莓视频在线观看网址| 色欲人妻一区二区在线| 婷婷色在线| 亚洲无码视频免费在线观看网址!| 欧美亚洲丝袜美女电影| 91成人在线免费视频| 色色97爱| 97日视频| 熟女人妻av在线资源,黄色的资源| 亚洲欧美成人网站AAA| 国产精品视频在线播放| 五月天婷婷综合| 99久久久久久亚洲精品不卡| 久久久久久无码人妻中文字幕| 七久久久| 把腿张开老子CAO烂你| 91高潮| 91伊人久久在线| 国产精品情侣啪啪| 国产福利影视| 国产精品福利视频播放| 精品国产99999| 一区二区 日韩 欧美 国产 传媒| 色999;丁香五月| 日韩免费三级黄片电影| 久久久成人精品| 亚洲少妇诱惑| 免费观看有码高清视频| 在线精品福利免费播放| 一本大道不卡一二三区| 日日爱99| 狠狠入| 欧美天天综合站| 一区二区久久天天干狠狠| 久久久久国产一区二| 桃花色综合影院| 中文字幕AV中出| 日日干夜夜骑| 日韩情色AV| 国产欧美美女免费观看视频| 国产亚州高清国产拍精| 五月天丁香婷婷综合网站| 99精品综合久久久久五月天| 欧美超碰人妻97| 诱惑人妻欧美一区在线播放| 看黑人AV不卡| 日韩激情视频| 天天综合网91入口| 旡码电影特区| 久久免费中文字幕在线观看| 五月婷婷激情网| 岛国视频免费在线观看| 在线日韩精品一区二区三区| 亚洲丨在线| 亚洲第一男人天堂| 国产日韩中文字幕欧美| 伊人视频| 久久久亚洲精品中文字幕人妻| 天操天操夜操夜月操月年年操操| 亚洲欧洲无码一区夜| 色天堂综合| 久湿久久| 台湾佬中文娱乐网久久久久久久久久com | k频道色撸撸| 亚洲成人妻日韩在线| 91九九九逼| 国产日韩人人| 插入粉嫩少妇视频| 高清孕妇孕交 交孕妇| 91女优在线观看 | а√天堂资源官网在线资源| 亚洲欧美一区二区网址| 国产高清精品一区二区三区毛片| 国产99精品一区二区三区免费| 中文字幕五月婷婷免费| blacked精品一区国产| 色情综合| 亚洲人成色9999精品久久| 十八禁网站在线| 99精品丰满人妻无| 欧美日本天堂| 日韩丨制服丨中文|在线| 久久精品成人一区二区三区蜜臀| 加勒比色99999| 2017天天操天天日| 亚洲欧美综合| 亚洲精品无码成人久久久99| www五月| 天堂日本亚洲欧美| 日韩欧美中文字| 91天天综合日韩欧美| 中文久久| 亚洲成人av电影在线| av片在线观看免费播放| 97精彩视频网站| 熟女精品一区二区在线观看| 久久大香蕉97| 久久黄片国产一区二区| 国产1769在线| 一区二区三区日韩欧美| 男人的天堂2018.| 久久久久久无码人妻中文字幕| 久久婷婷成人综合色怡春院| 男女日B国产| 成人性爱高清视频免费看| 日韩人体偷拍| 久久美国毛片| 日韩性爱啪啪视频| 激情久久av一区av二区av| 人妻密肉在线观看| 亚洲第一页综合在线| 韩国一级婬片A片无码天美| 91久久久久久| 天天内射| 亚洲色系另类精品国产| 亚洲欧美一区二区三区在钱蜜桃 | 热热热热日日漂亮永久永久国产日| 国产精品69久久久久孕妇欧美 | 东京日日夜夜| 亚洲加勒比色图| 国产精品不卡av免费在线观看| 加勒比在线视频一区二区三区| 91九久| 夜夜嗨视频| 亚洲免费人妻在| 麻豆 亚洲 97| 国产欧美精选激情视频| 麻豆2区1区天美| 秘书高跟黑色丝袜国产91在线| 欧美|91色综合| 综合性视频99| 偷拍亚洲熟女视频播放| 日韩素人无码一区二区三区三州| 中文字幕综合人妻| 操啊国产| 人妻出轨一区二区三区| 天堂69亚洲精品中文字| 97超碰国产亚洲精品资源| 深夜激情| 大地资源在线观看中文第二页| 97频视在线| 成人无码在线超碰网| 国产精品久久发布| 97欧美视频| 欧美日韩丝袜 | aV中文麻| 亚洲综合色网| 精品视频一区二区| 白嫩嫩一区| 中文字幕第2页| 99久久婷婷| 日韩欧美~中文字| 日本肉体xxxx裸交| 亚州大图综合色图| 人人做人人妻人人夜视频| 超碰视97中文| 超碰在线香蕉| 天天干人妻视频| 99欧美| 91少妇人妻| 欧美人妻精品| 日本一区二区三区免费观看| 牛牛久久国产精品视频一二三| 精品国产乱码| 欧美日韩美女精品久草一区二区三区| 一本一道波多野毛片中文在线| 九九九九九九九九九九九九九九九女| 中国一级操逼视频| 国产精品97超碰| 少妇蜜汁| 日本成人A片网站| 天堂精品| 欧洲Au麻豆| 日本操大逼| 人妻丰满熟妇av无码区蜜桃| 日韩欧美中文| 日韩内| av在线浏览| 17c嫩草51久久91嫩草| 日本精品久久久久久久| 操美女高潮抽搐白浆| 东京热天堂网| 97精品中文字幕| www.狠狠操| 亚洲 欧美 日韩 国产一区二区 | 中文乱码字字幕在线第5页| 中 文字幕一区二区三四 五 区日 日 骚| 国产高清午夜成人在线观看| 性性久久| 高清在线偷拍自拍视频| 欧美成人A√在线一区二区| www.acm成人黄色毛片| 日日日日做夜夜夜夜无码| 天天热精品| 国产欧美一区二区| 黄色大香焦1级‘′‘| 精品人妻一区二区三区鲁大师| 丝袜熟女2P| 18禁网站在线播放| 亚州欧美色图| 北野未奈加勒比av| 欧美第38页| 97超碰国产亚洲精品资源| 18禁免费视频| 精品久久久av无码免费| 狠狠爱夜夜| 裸体美女久久久| 日韩丝袜人妻AV| 丁香五月激情婷婷| 一级黄色视频网| 大象AV在线| 性高潮久久久久久久久久久| 北京美女一区二区| 中文啪啪视频| 嗯嗯啊啊视频在线看| 欧美视频一区二区在线| 亚洲男人综合| 91黑丝在线| 天堂亚洲精品| 亚洲无限观看| 亚洲一本色码中文字幕| 99中出在线| 国产日韩久久| 亚洲人精品午夜不卡| 欧美色性情| 国产精品网站www| 99热精品在线| 免费看黄视频亚洲网站| 国产操伦| 性在久久久久久| 国产精品久久久久久久久久久久久久吹| 嗯啊啊啊轻点视频 | 91性情| 久久久久久久久国产| 殴美,日韩国产伦精品| 色情五月综合婷婷| 伊人黄色视频免费观看| 欧美日韩国产中文精品字幕自在自线| 亚洲另类小说卡通动漫| 成人五月天丁香激情综合| 91色射| 中文字幕欧洲有码| 亚州国产成人精品女人久久| 试看60秒| 欧美色天堂网在线视频| 中文久久96| 99精品无码| 久9久9久9久9久9久9| 日本大香蕉综合网红本杳社区| 国内毛片四区| 久久久久久加勒比| 一区在线精品中文字幕| 18禁无码永久免费无限制| 黄片免费日韩| 中国东北熟女老太婆内谢| 两性综合网| 99热最新网址| 东北夫妻性偷拍| 久久婷婷亚洲欧| 丝袜高跟澳门91视频| 久久久久无码一妻区| 久久久精品九| 日韩电影在线观看网址| 午夜视频黄| 国产欧美日韩一区二区三区| 欧美性生活综合| 成人性爱电影网| 激情五月天色播| 神马午夜久久久| 欧美,亚洲,日韩,v,天堂,手机在线观看| 色哟哟精品1精品2| 精品国产乱码久久久久久蜜臀| a亚洲欧美色欲| 精品一区二区在线针对华人免费观看这里只有精品免费观看 | 一区二区三| 国产探花日韩援交| 色五月首页| 国产精品久久发布| 天天爱综合网| 欧美一二三级精品在线| AV一区观看| 国产97色在线| 啊啊啊好大好湿| 屁股久久久久久| ..日韩av毛片精品久久久| 久久精品小视频| 蜜臀aV午夜一区二区三区| 阿姨一区二区免费视频-高清正片西瓜视频下载app-T450AV | 玖玖爱免费观看视频| AA丁香综合激情| 欧洲亚洲人妻无码中字久久三区四区 | 97网址www| 88在线一区二区三区| 可免费观看的av毛片中日美韩| 亚洲第一精品在线视频 | 欧美一区二区| 91九色蝌蚪在线观看| 亚洲人精品久久久喷水| 国产9熟妇视频网站| 国产精品久久久久久久电影渣男| 999在线电影香蕉| 欧美综合自拍亚洲综合图| 玖草在线视频| 人妻少妇久久久| 日韩BBN| 日小BB小视频| 理论久久婷婷网 8| 人人妻人人爽人人精品| 中文字幕一二区二三区人妻专区| 亚洲精品视频二区| wwe 天天干.com| 高清国产精品福利网站| 探花熟女,姿勢到位,體驗感也到位| 亚洲不卡AV在线| 青青五月天| 激情五月天色色| 91人妻久久久久久久久久久久久| 秋霞网—男女啪啪亚洲免费体验区 | 在线a v| 2023天天操夜夜操| av九九| 18精品一二区| 思思热影视| 综合网欧| 在线观看成人性爱免费小视频| 九色 人妻 大香蕉| 91啪啪| 天天摸,夜夜摸| 久久成人东京热人妻| 在线视频日韩欧美国产| 亚洲AO在线| 91无遮挡| 五月丁香综合| 精品国产乱码久久久影院| 日本www操操操| wuyechaopeng| 网页导航五月天免费一二三区| 久久久久久久78| 亚洲无码成人精品| 精产国品一区二三产品| 日韩性爱免费观看视频| 二区熟妇韩日| 免费观看性欧美一级| 麻豆一区在线| 亚洲精品aa久久伊人| 精品9999| 蜜桃久久综合视频| 色黄污美女啪啪啪免费网站| 蜜臀久久99精品久久久久久久久| 国产又黄又粗又猛大片| 麻豆性爱视频在线播放| 中文字幕精品探花视频| 女一区二区| 人人摸人人摸人人干| 骚逼一区二区| 午夜激情成人在线观看| 久操视频免费观看| 丁香五月成人| 日韩视频中文字幕| 大奶尤物鲍汁淫荡欧美视频粉嫩夜夜骚| 欧美aaaaaaa| 97精品人妻一二三四| 玖玖97综合| 韩日色费| 国偷自 一区二区| 久久久蜜桃一区二区三区| 黄人人操人人操| 久久久成人精品| 人妻加勒比东京热| 亚洲成a人片在线观看中文!!!| 午夜福利区| 九九热在线精品视频| 麻豆视频国产一区二区| 锕锕好爽 死我在线观看| 大香蕉丝袜一级片| 20cm女自慰在线日韩欧美| 一牛一区二区三区久久| 国产乱伦一二三区| 欧美一区二区男人天堂| 人妻内射一区二区在线视频| 欧美99热| 黄色AAAAA欧美| 蜜臀99久久精品久久久懂爱| 69AV女优男人的天堂| 黄视频免费| 亚洲丰满很很操| 国产日比| 国产精品内射婷婷一级二| 精品九九九九九九九九九| 99热91| 久久久久免费看少妇A片特黄| 狠狠躁久久躁| renqi久久久久久久久久久久| 最新av中文字幕高清| 91美女视频直播| 欧美色997| 久久精品日韩| 麻豆60秒| 午夜操操操| 国产精品天美传媒| 天天看天天日天天操| 天天综合,91入口| 成人精品欧洲亚洲| 久久久久久久少妇| 色色色网站| 午夜国产成人福利视频| 韩日性爱av| 搡老女人老91妇女老熟女| 欧美欧美少妇| 亚洲色图片区| 精品久久久久久AV无码| 欧美色人| 99免费视频| 亚洲1区| 日韩免费大片一级播放| 成人性爱AV在线免费观看| www国产精品| 日日骚av| av婷婷色网| 99色综合| 五月丁香综合啪啪| 99九九精品| 国产男人又猛又粗又爽| 东京热天堂网| 嗯嗯啊啊好爽| 91丨人妻丨国产丨丝袜| 91日韩网站| 亚洲不卡一| 91久久国产精品| 美女t无毒不卡不卡| 亚洲激情深爱文学小说网站| 91美女高潮| 九九操久久国产免费视频| 久久久精选| 亚洲精品九九九九九九| 熟女少妇视频| 俄罗斯及免费在线看| 欧美性夜| 欧美综合另类| .精品人妻一区二区三| 亚洲欧洲无码bt精品合集| 无码人妻一区二区三区色欲aⅴ| V A在线| 一区操逼| A 在线网址| 精品国产久热在线观看| 爽 好舒服 无码刺激久久| 99热官网| 丝袜六区| 色香在线| 欧美乱妇狂野欧美在线视频| 熟女AV一区| 丝袜美腿操av| 啪啪视频免费在线观看| 成人无码在线超碰网| 啪啪啪东京| 免费看一级a性色生活片久久无| 五月婷婷六月天| 大香蕉碰碰| yazhousetuoumei| 青青草玖玖爱| 夜色综合| 国产成人亚洲精品无码最新在线| 中文字幕乱码人妻二区三区| 欧美成人黄网色网站| 亚洲欧洲国产综合av| 久久香蕉国产传媒一区剧情天美| 在现视频女上位好爽| 玖玖草久草99蜜月一区二区三区| 97欧美色| 18禁看网站一区| 人妻精品一区二区三区| 日韩成人私密一级精品av| 夜夜狼人妻| 999九九九九国产动| 国产强奸乱伦第1页| 日韩人妻有码免费视频| 激情五月天综合网| 天天干人妻| 麻豆精品一区二区三区四区免费观看| 国产在线能看的你懂的| 色狠狠综合| 精品国产乱码久久久兰草影视| 91老司机在线| 日韩亚洲欧美中文字幕| 日本东京热加勒比久久| 91亚洲黑人| 亚洲AO在线| 啊啊啊好大好深| 国产视频一区二区三区在线免费观看| 色香蕉影院| 国产25页| 亚洲自拍偷拍视频在线 | 五月婷色| 美女毛片999| 91色交| 无码高清专| 色婷网| 久久精品91| 911av网站免费观看| 大香蕉免| 亚洲欧美在线丝袜| 欧美亚洲日本激情在线| 久久精品国产久精国产| 熟女激情综合网| av片在线观看免费播放| 国产精品久久久九九九| 日韩欧美操逼xxx| 国产精品国产自产拍高清AV| 无码人妻毛片丰满熟妇精品区| 成人精品无码| 人人妻人人操人人乐| 91白嫩| 女人被添高潮免费视频| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 国产男女边吃边摸视频网站| 亚洲色吧网| 久久超碰日韩精品| 午夜天堂精品久久久久91| 色女免费在线观看视频网址| 国内毛片欧美香蕉精品| 少妇超碰在线| 婷婷丁香人妻 | 日本顶级天天操狠狠操夜夜操中文字幕| 手机看片日韩人妻| 精品一二三区四视频| 91久久久久免| 国产欧美岛国精品一区| 亚洲av无线观看| 97爱免费插| 国产午夜精品在线观看| 国产99 中文字幕日韩小视频| 男人的天堂在线| 国产一级137片内射麻豆| 美腿丝袜高跟网免费视频免费视频| 不卡中文字幕aⅴ在线| 在线看免费无码AV天堂的| 91青青在线视频| 亚洲九区| 香蕉人欧美综合| 久久精品亚洲婷婷| 国产日韩久久| 欧美亚洲第1页| 狠狠中文字幕| 亚洲精品97p| 久操不卡视频| 91M一社| 大香蕉97久久| 国产精品午夜福利亚洲综合网| 精品一区二区三区最新| 奇米四色网| 新97国产超碰| 91丨熟女丨丰满熟女| 天天日熟妇| 亚洲黑丝在线| 免费成人在线观看91| 青青操在线亚洲视频观看欧美在线 | 九九视频黄色片| 强奸熟女一区二区三区| 嗯嗯啊啊操我| 97碰碰日本乱偷人妻中文的| 竹菊影视国产一区二区| 亚洲全色网| 久噜噜| 国产精品一区二区校花| 5252色欧美在线男人的天堂| 欧美精品另类人妖xxxx| 日本无码1| 大色网久久| 亚洲日本韩国在线| 91亚洲综合| 丁香婷婷激情五月天无毒不卡 | 人妻色偷色噜| 日韩人妻精品| 97综合在线观看| 亚洲欧美在线观看2021| 久久久亚洲精品中文字幕人妻| 亚洲天堂,男人| 精品一区二区在线针对华人免费观看这里只有精品免费观看 | 密臀视频三区免费网站| 亚洲精品国产精品乱码不卡| 日本中文字幕在线电影| 亚州欧美另类| 99热精品青草在线| 欧美黄色片AAAAA| 人妻啪| 9久久精品| 国产一区二区三区影片| 插入逼91| 一区二区三区看视频| 国产婷婷综合在线观看| 在线 欧美 亚洲| 色噜噜人妻av 中文字幕| 欧美精品xxxwww| 91免费看一区二区三区| AV中文字幕三四五| 黄污污污污| 强免费黄色网址| 天天综合站| 天天亚洲| 亚洲欧美综合网站| 久久免费老司机精品| 国产黄片精品在线| 国产精品人妻无码久久久互動交流 | 先锋激情∨在线视频播放| 亚洲激情色片| 污啪啪啪视频| 不卡啪啪视频| 久久人人爽爽人人爽人人片αV| 91夜色| 亚洲中文字幕av| 亚洲情色在线| 青青操在线亚洲视频观看欧美在线| 长长久久免费视频| 无码自拍SM| 色噜噜精品一区二区三| 国产精品午夜福利| 伊人96在线| 爱妻综合网| 成人精品电影| caopeng97| 夜夜操老骚逼视频网站| 丁香激情网| 人人操av| 国产欧美一区激情交| 天堂8在线新版官网| 亚洲AV无码成人精品久久| 中国东北熟女老太婆内谢| 台湾一区国产高清在线| 九久精品| 亚洲综合九九| 97超碰超碰| 啊啊啊好多水| 人人操人人色网| 亚洲开心网| 91亚州| 美女天天干| 蜜乳AV.COM| 日逼国产| 无码av永久免费专区网站| 久久黄色视频一区二区三区 | 任你干在线视频| 东京热大香焦| 色网亚洲人| 免费视频观看60秒| 蜜桃久久一区二区| 婷婷超|