| // Copyright (c) 2011 The Chromium OS Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef SHILL_SOCKETS_H_ |
| #define SHILL_SOCKETS_H_ |
| |
| #include <sys/socket.h> |
| #include <sys/types.h> |
| |
| #include <base/basictypes.h> |
| |
| namespace shill { |
| |
| // A "sys/socket.h" abstraction allowing mocking in tests. |
| class Sockets { |
| public: |
| virtual ~Sockets(); |
| |
| // bind |
| virtual int Bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen); |
| |
| // close |
| virtual int Close(int fd); |
| |
| // ioctl |
| virtual int Ioctl(int d, int request, void *argp); |
| |
| // send |
| virtual ssize_t Send(int sockfd, const void *buf, size_t len, int flags); |
| |
| // sendto |
| virtual ssize_t SendTo(int sockfd, const void *buf, size_t len, int flags, |
| const struct sockaddr *dest_addr, socklen_t addrlen); |
| |
| // socket |
| virtual int Socket(int domain, int type, int protocol); |
| }; |
| |
| class ScopedSocketCloser { |
| public: |
| ScopedSocketCloser(Sockets *sockets, int fd); |
| ~ScopedSocketCloser(); |
| |
| private: |
| Sockets *sockets_; |
| int fd_; |
| |
| DISALLOW_COPY_AND_ASSIGN(ScopedSocketCloser); |
| }; |
| |
| } // namespace shill |
| |
| #endif // SHILL_SOCKETS_H_ |