60 lines
		
	
	
		
			No EOL
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			No EOL
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#ifndef _SOCKET_WRAPPER_H_
 | 
						|
#define _SOCKET_WRAPPER_H_
 | 
						|
#include <stdint.h>
 | 
						|
#include <sys/types.h>
 | 
						|
#include <sys/socket.h>
 | 
						|
#include <netinet/in.h>
 | 
						|
#include <arpa/inet.h>
 | 
						|
#include <netdb.h>
 | 
						|
 | 
						|
 | 
						|
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 |