HW12/socket_wrapper.h

60 lines
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>
#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
int getBufferSizeFrom(int sock);
/*register alarm for timeout_recv()*/
void register_alarm();
/*
return -2 if timeout occur.
otherwise, implement equal to 'recv'.
you must call register_alarm() before you use this.
Since alarm() is called by internal implementation, don't use it if other alarms already exist.
*/
ssize_t timeout_recv(int fd,void * buf,size_t n,int timeout);
/*
recieve data to buf until all bytes.
*/
ssize_t recv_until_byte(int fd,void * buf, size_t n,int timeout);
#endif