muduo 的 shutdown()沒有直接關閉 TCP串連的原因

來源:互聯網
上載者:User

今天收到一位網友來信:

在 simple 中的 daytime 樣本中,服務端主動關閉時調用的是如 下函數序列,這不是只是關閉了串連上的寫操作嗎,怎麼是關閉了整個串連?

1: void DaytimeServer::onConnection(const muduo::net::TcpConnectionPtr& conn)

2: {

3:   if (conn->connected())

4:   {

5:     conn->send(Timestamp::now().toFormattedString() + "\n");

6:     conn->shutdown();

7:   }

8: }

9:

10: void TcpConnection::shutdown()

11: {

12:   if (state_ == kConnected)

13:   {

14:     setState(kDisconnecting);

15:     loop_->runInLoop(boost::bind(&TcpConnection::shutdownInLoop, this));

16:   }

17: }

18:

19: void TcpConnection::shutdownInLoop ()

20: {

21:   loop_->assertInLoopThread();

22:   if (! channel_->isWriting())

23:   {

24:     // we are not writing

25:     socket_->shutdownWrite();

26:   }

27: }

28:

29: void Socket::shutdownWrite()

30: {

31:   sockets::shutdownWrite(sockfd_);

32: }

33:

34: void sockets::shutdownWrite (int sockfd)

35: {

36:   if (::shutdown(sockfd, SHUT_WR) < 0)

37:   {

38:     LOG_SYSERR << "sockets::shutdownWrite";

39:   }

40: }

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。