1f4e8e3d3SShuo Chen // Copyright 2010, Shuo Chen. All rights reserved. 2f4e8e3d3SShuo Chen // http://code.google.com/p/muduo/ 3f4e8e3d3SShuo Chen // 4f4e8e3d3SShuo Chen // Use of this source code is governed by a BSD-style license 5f4e8e3d3SShuo Chen // that can be found in the License file. 6f4e8e3d3SShuo Chen 7f4e8e3d3SShuo Chen // Author: Shuo Chen (chenshuo at chenshuo dot com) 8f4e8e3d3SShuo Chen // 9f4e8e3d3SShuo Chen // This is an internal header file, you should not include this. 10f4e8e3d3SShuo Chen 11f4e8e3d3SShuo Chen #ifndef MUDUO_NET_SOCKETSOPS_H 12f4e8e3d3SShuo Chen #define MUDUO_NET_SOCKETSOPS_H 13f4e8e3d3SShuo Chen 14f4e8e3d3SShuo Chen #include <arpa/inet.h> 15f4e8e3d3SShuo Chen #include <endian.h> 16f4e8e3d3SShuo Chen 17f4e8e3d3SShuo Chen namespace muduo 18f4e8e3d3SShuo Chen { 19f4e8e3d3SShuo Chen namespace sockets 20f4e8e3d3SShuo Chen { 21f4e8e3d3SShuo Chen 22f4e8e3d3SShuo Chen inline uint64_t hostToNetwork64(uint64_t host64) 23f4e8e3d3SShuo Chen { 24f4e8e3d3SShuo Chen return htobe64(host64); 25f4e8e3d3SShuo Chen } 26f4e8e3d3SShuo Chen 27f4e8e3d3SShuo Chen inline uint32_t hostToNetwork32(uint32_t host32) 28f4e8e3d3SShuo Chen { 29f4e8e3d3SShuo Chen return htonl(host32); 30f4e8e3d3SShuo Chen } 31f4e8e3d3SShuo Chen 32f4e8e3d3SShuo Chen inline uint16_t hostToNetwork16(uint16_t host16) 33f4e8e3d3SShuo Chen { 34f4e8e3d3SShuo Chen return htons(host16); 35f4e8e3d3SShuo Chen } 36f4e8e3d3SShuo Chen 37f4e8e3d3SShuo Chen inline uint64_t networkToHost64(uint64_t net64) 38f4e8e3d3SShuo Chen { 39f4e8e3d3SShuo Chen return be64toh(net64); 40f4e8e3d3SShuo Chen } 41f4e8e3d3SShuo Chen 42f4e8e3d3SShuo Chen inline uint32_t networkToHost32(uint32_t net32) 43f4e8e3d3SShuo Chen { 44f4e8e3d3SShuo Chen return ntohl(net32); 45f4e8e3d3SShuo Chen } 46f4e8e3d3SShuo Chen 47f4e8e3d3SShuo Chen inline uint16_t networkToHost16(uint16_t net16) 48f4e8e3d3SShuo Chen { 49f4e8e3d3SShuo Chen return ntohs(net16); 50f4e8e3d3SShuo Chen } 51f4e8e3d3SShuo Chen 52f4e8e3d3SShuo Chen /// 53f4e8e3d3SShuo Chen /// Creates a non-blocking socket file descriptor, 54f4e8e3d3SShuo Chen /// abort if any error. 55f4e8e3d3SShuo Chen int createNonblockingOrDie(); 56f4e8e3d3SShuo Chen 57f4e8e3d3SShuo Chen+int connect(int sockfd, const struct sockaddr_in& addr); 58f4e8e3d3SShuo Chen void bindOrDie(int sockfd, const struct sockaddr_in& addr); 59f4e8e3d3SShuo Chen void listenOrDie(int sockfd); 60f4e8e3d3SShuo Chen int accept(int sockfd, struct sockaddr_in* addr); 61f4e8e3d3SShuo Chen void close(int sockfd); 62f4e8e3d3SShuo Chen void shutdownWrite(int sockfd); 63f4e8e3d3SShuo Chen 64f4e8e3d3SShuo Chen void toHostPort(char* buf, size_t size, 65f4e8e3d3SShuo Chen const struct sockaddr_in& addr); 66f4e8e3d3SShuo Chen void fromHostPort(const char* ip, uint16_t port, 67f4e8e3d3SShuo Chen struct sockaddr_in* addr); 68f4e8e3d3SShuo Chen 69f4e8e3d3SShuo Chen struct sockaddr_in getLocalAddr(int sockfd); 70f4e8e3d3SShuo Chen+struct sockaddr_in getPeerAddr(int sockfd); 71f4e8e3d3SShuo Chen 72f4e8e3d3SShuo Chen int getSocketError(int sockfd); 73f4e8e3d3SShuo Chen+bool isSelfConnect(int sockfd); 74f4e8e3d3SShuo Chen 75f4e8e3d3SShuo Chen } 76f4e8e3d3SShuo Chen } 77f4e8e3d3SShuo Chen 78f4e8e3d3SShuo Chen #endif // MUDUO_NET_SOCKETSOPS_H 79