#ifndef _SOCKET_WRAPPER_H_ #define _SOCKET_WRAPPER_H_ #include #include #include #include #include #include #ifdef USE_SENDFILE #include const size_t SEND_FILE_CHUNK_SIZE = 0x100000; /*1MB*/ #endif static const in_port_t SERVER_PORT = 9091; static const size_t DEFAULT_BUF_SIZE = 4096; static const size_t MINIMUM_BUF_SIZE = 1024; /*0 < x < MAX_PATH_SIZE*/ static const uint16_t MAX_PATH_SIZE = 256; static const int TIMEOUT = 5; 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) #ifdef USE_GETADDRINFO #endif /** * 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