63 lines
		
	
	
		
			No EOL
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			No EOL
		
	
	
		
			1.2 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>
 | 
						|
 | 
						|
#ifdef USE_SENDFILE
 | 
						|
#include <sys/sendfile.h>
 | 
						|
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);
 | 
						|
 | 
						|
#endif |