Sponge
CS144's user-space TCP library
|
Base class for network sockets (TCP, UDP, etc.) More...
#include <socket.hh>
Public Member Functions | |
void | bind (const Address &address) |
Bind a socket to a specified address with bind(2), usually for listen/accept. More... | |
void | connect (const Address &address) |
Connect a socket to a specified peer address with connect(2). More... | |
Address | local_address () const |
Get local address of socket with getsockname(2). More... | |
Address | peer_address () const |
Get peer address of socket with getpeername(2). More... | |
void | set_reuseaddr () |
Allow local address to be reused sooner via SO_REUSEADDR. More... | |
void | shutdown (const int how) |
Shut down a socket via shutdown(2). More... | |
Public Member Functions inherited from FileDescriptor | |
FileDescriptor (const int fd) | |
Construct from a file descriptor number returned by the kernel. More... | |
~FileDescriptor ()=default | |
Free the std::shared_ptr; the FDWrapper destructor calls close() when the refcount goes to zero. More... | |
void | close () |
Close the underlying file descriptor. More... | |
FileDescriptor | duplicate () const |
Copy a FileDescriptor explicitly, increasing the FDWrapper refcount. More... | |
std::string | read (const size_t limit=std::numeric_limits< size_t >::max()) |
Read up to limit bytes. More... | |
void | read (std::string &str, const size_t limit=std::numeric_limits< size_t >::max()) |
Read up to limit bytes into str (caller can allocate storage) More... | |
void | set_blocking (const bool blocking_state) |
Set blocking(true) or non-blocking(false) More... | |
size_t | write (BufferViewList buffer, const bool write_all=true) |
Write a buffer (or list of buffers), possibly blocking until all is written. More... | |
size_t | write (const char *str, const bool write_all=true) |
Write a string, possibly blocking until all is written. More... | |
size_t | write (const std::string &str, const bool write_all=true) |
Write a string, possibly blocking until all is written. More... | |
int | fd_num () const |
underlying descriptor number More... | |
bool | eof () const |
EOF flag state. More... | |
bool | closed () const |
closed flag state More... | |
unsigned int | read_count () const |
number of reads More... | |
unsigned int | write_count () const |
number of writes More... | |
FileDescriptor (const FileDescriptor &other)=delete | |
copy construction is forbidden More... | |
FileDescriptor & | operator= (const FileDescriptor &other)=delete |
copy assignment is forbidden More... | |
FileDescriptor (FileDescriptor &&other)=default | |
move construction is allowed More... | |
FileDescriptor & | operator= (FileDescriptor &&other)=default |
move assignment is allowed More... | |
Protected Member Functions | |
Socket (const int domain, const int type) | |
Construct via socket(2). More... | |
Socket (FileDescriptor &&fd, const int domain, const int type) | |
Construct from a file descriptor. More... | |
template<typename option_type > | |
void | setsockopt (const int level, const int option, const option_type &option_value) |
Wrapper around setsockopt(2). More... | |
Protected Member Functions inherited from FileDescriptor | |
void | register_read () |
increment read count More... | |
void | register_write () |
increment write count More... | |
Private Member Functions | |
Address | get_address (const std::string &name_of_function, const std::function< int(int, sockaddr *, socklen_t *)> &function) const |
Get the local or peer address the socket is connected to. More... | |
Base class for network sockets (TCP, UDP, etc.)
Socket is generally used via a subclass. See TCPSocket and UDPSocket for usage examples.
|
protected |
|
protected |
Construct from a file descriptor.
[in] | fd | is the FileDescriptor from which to construct |
[in] | domain | is fd 's domain; throws std::runtime_error if wrong value is supplied |
[in] | type | is fd 's type; throws std::runtime_error if wrong value is supplied |
void Socket::bind | ( | const Address & | address | ) |
void Socket::connect | ( | const Address & | address | ) |
Connect a socket to a specified peer address with connect(2).
[in] | address | is the peer's Address |
|
private |
Get the local or peer address the socket is connected to.
[in] | name_of_function | is the function to call (string passed to SystemCall()) |
[in] | function | is a pointer to the function |
Address Socket::local_address | ( | ) | const |
Get local address of socket with getsockname(2).
Address Socket::peer_address | ( | ) | const |
Get peer address of socket with getpeername(2).
void Socket::set_reuseaddr | ( | ) |
Allow local address to be reused sooner via SO_REUSEADDR.
SO_REUSEADDR
may reduce the robustness of your application
|
protected |
Wrapper around setsockopt(2).
[in] | level | The protocol level at which the argument resides |
[in] | option | A single option to set |
[in] | option_value | The value to set |
See setsockopt(2) for details.
void Socket::shutdown | ( | const int | how | ) |
Shut down a socket via shutdown(2).
[in] | how | can be SHUT_RD , SHUT_WR , or SHUT_RDWR ; see shutdown(2) |