示例#1
0
void
udp_server(lthread_t *lt, void *args)
{
    struct sockaddr_in listener;
    struct sockaddr_in client;
    socklen_t listener_len = sizeof(listener);
    int s;
    int ret;
    char buf[64];
    lthread_detach();

    if ((s=lthread_socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP))==-1) {
        perror("error");
        return;
    }

    memset((char *) &listener, 0, sizeof(listener));
    listener.sin_family = AF_INET;
    listener.sin_port = htons(5556);
    listener.sin_addr.s_addr = htonl(INADDR_ANY);
    if (bind(s, (struct sockaddr *)&listener, sizeof(listener)) == -1) {
        perror("Cannot bind");
        return;
    }

    while (1) {
        ret = lthread_recvfrom(s, buf, 64, 0, (struct sockaddr *)&client, &listener_len, 1000);
        printf("ret returned %d: %s\n", ret, buf);
    }

   close(s);
}
示例#2
0
static int create_listener(char *ip, short port)
{
    int fd = 0, ret = 0;
    int opt;
    struct sockaddr_in sin;

    fd = lthread_socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (-1 == fd) {
        return -1;
    }

    opt = 1;
    if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &opt,sizeof(int)) == -1) {
        perror("failed to set SOREUSEADDR on socket");
    }

    memset(&sin, 0, sizeof(sin));
    sin.sin_family = PF_INET;
    sin.sin_addr.s_addr = INADDR_ANY;
    /*if(!inet_pton(AF_INET, ip, &sin.sin_addr)) {
        perror("parse ip error");
        return -1;
    }*/

    sin.sin_port = htons(port);
    ret = bind(fd, (struct sockaddr *)&sin, sizeof(sin));
    if (-1 == ret) {
        close(fd);
        perror("cannot bind socket. closing.\n");
        return -1;
    }
    ret = listen(fd, 1024);
    if (-1 == ret) {
        close(fd);
        perror("cannot listen on socket. closing.\n");
        return -2;
    }

    return fd;
}
示例#3
0
bool TcpServer::listen(int port)
{
	// create listening socket
	fd = lthread_socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
	if(fd == -1)
		return false;

	int opt = 1;
	if(setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(int)) == -1)
		perror("failed to set SOREUSEADDR on socket");

	sockaddr_in sin;
	sin.sin_family = PF_INET;
	sin.sin_addr.s_addr = INADDR_ANY;
	sin.sin_port = htons(port);

	// bind to the listening port
	int ret = bind(fd, (struct sockaddr *)&sin, sizeof(sin));
	if(ret == -1)
		return false;

	::listen(fd, 128);
	return true;
}