#ifndef _SOCKET_WRAPPER_H_ #define _SOCKET_WRAPPER_H_ #include #include #include #include #include #include static const size_t DEFAULT_BUF_SIZE = 4096; static const size_t MINIMUM_BUF_SIZE = 1024; enum{ RES_OK = 0, RES_ERR = 1, RES_USR_ERR = 2 }; #pragma pack(push,1) struct ReadOp{ uint16_t file_url_size;/* strlen(data) */ uint16_t padding0; }; struct TransferResult{ int16_t res; int16_t error_msg_size; int64_t file_size; int32_t err_number; /*errno*/ }; #pragma pack(pop) /** * find buffer size from sock * thread safe */ int getBufferSizeFrom(int sock); /** * return -2 if timeout occur. * otherwise, implement equal to 'recv'. * `timeout` unit is second. * thread safe */ ssize_t timeout_recv(int fd,void * buf,size_t n,int timeout); /** * recieve data to buf until all bytes. * thread safe */ ssize_t recv_until_byte(int fd,void * buf, size_t n,int timeout); /** * find sockaddr by hostname * it perform like `gethostbyname` * hostname could not be greater than _SC_HOST_NAME_MAX. * return 0 on success, otherwise return ecode. * ecode can be converted to string by `gai_strerror`. */ int getsockaddrbyname(int domain,int type, int protocol, const char * hostname_str, struct sockaddr * retaddr); #endif