/************************************************************************
 * AUTHOR: NiuJiuRu
 * FILENAME: swtcp.h
 * DESCRIPTION: TCP socket
 * NOTE:
 * HISTORY:
 * 1, [2010-11-30] created by NiuJiuRu
 ***********************************************************************/
#ifndef __SWTCP_H__
#define __SWTCP_H__

#ifdef __cplusplus
extern "C"
{
#endif

/* 创建一个tcp socket */
int sw_tcp_socket();

/* 关闭一个tcp socket */
void sw_tcp_close(int skt);

/* 连接远端 */
int sw_tcp_connect(int skt, unsigned int ip, unsigned short port);

/* 绑定接收地址和端口, sever使用bind()与本机绑定, client使用connect()与远程主机连接 */
int sw_tcp_bind(int skt, unsigned int ip, unsigned short port);

/* 开始监听, max为处理连接的队列长度, 建议设置为: SOMAXCONN */
int sw_tcp_listen(int skt, int max);

/* 等待远程连接(从连接队列中读取第一个已完成的连接, 队列长度减一) */
int sw_tcp_accept(int skt, unsigned int *ip, unsigned short *port);

/* 发送数据 */
int sw_tcp_send(int skt, const char *buf, int send_len);

/* 接收数据 */
int sw_tcp_recv(int skt, char *buf, int buf_size);

/* 配置tcp socket */
int sw_tcp_ioctl(int skt, int type, unsigned long *val);

/* 检测tcp socket的状态, timeout单位为ms */
int sw_tcp_select(int skt, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, int timeout);

#ifdef __cplusplus
}
#endif

#endif /*__SWTCP_H__*/
