1 // Copyright 2010, Shuo Chen. All rights reserved. 2 // http://code.google.com/p/muduo/ 3 // 4 // Use of this source code is governed by a BSD-style license 5 // that can be found in the License file. 6 7 // Author: Shuo Chen (chenshuo at chenshuo dot com) 8 // 9 // This is an internal header file, you should not include this. 10 11 #ifndef MUDUO_NET_SOCKET_H 12 #define MUDUO_NET_SOCKET_H 13 14 #include <boost/noncopyable.hpp> 15 16 namespace muduo 17 { 18 19 class InetAddress; 20 21 /// 22 /// Wrapper of socket file descriptor. 23 /// 24 /// It closes the sockfd when desctructs. 25 /// It's thread safe, all operations are delagated to OS. 26 class Socket : boost::noncopyable 27 { 28 public: 29 explicit Socket(int sockfd) 30 : sockfd_(sockfd) 31 { } 32 33 ~Socket(); 34 35 int fd() const { return sockfd_; } 36 37 /// abort if address in use 38 void bindAddress(const InetAddress& localaddr); 39 /// abort if address in use 40 void listen(); 41 42 /// On success, returns a non-negative integer that is 43 /// a descriptor for the accepted socket, which has been 44 /// set to non-blocking and close-on-exec. *peeraddr is assigned. 45 /// On error, -1 is returned, and *peeraddr is untouched. 46 int accept(InetAddress* peeraddr); 47 48 /// 49 /// Enable/disable SO_REUSEADDR 50 /// 51 void setReuseAddr(bool on); 52 53+ void shutdownWrite(); 54+ 55 private: 56 const int sockfd_; 57 }; 58 59 } 60 #endif // MUDUO_NET_SOCKET_H 61