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