ابزار کاربر

ابزار سایت


c-socket-programming:library

کتابخانه توابع

// get sockaddr, IPv4 or IPv6:
void *get_in_addr(struct sockaddr *sa)
{
	if (sa->sa_family == AF_INET) {
		return &(((struct sockaddr_in*)sa)->sin_addr);
	}
 
	return &(((struct sockaddr_in6*)sa)->sin6_addr);
}
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
 
int get_listener_socket(char *ipv4str, char *port)
{
    int status, sockfd, sockopt;
    struct addrinfo hints, *res, *rp;
 
    memset(&hints, 0, sizeof(hints));
    hints.ai_family = AF_INET;
    hints.ai_socktype = SOCK_STREAM;
    status = getaddrinfo(ipv4str, port, &hints, &res);
    if (status != 0) {
        fprintf(stderr, "getaddrinfo() error: %s\n", gai_strerror(status));
        return -1;
    }
 
    for (rp = res; rp != NULL; rp = rp->ai_next) {
        sockfd = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol);
        if (sockfd == -1) {
            perror("socket() error ");
            continue;
        }
 
        sockopt = 1;
        status = setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, 
                            (void*)&sockopt, sizeof(sockopt));
        if (status == -1) {
            perror("setsockopt() error ");
            close(sockfd);
            continue;
        }
 
        status = bind(sockfd, rp->ai_addr, rp->ai_addrlen);
        if (status == -1) {
            perror("bind() error ");
            close(sockfd);
            continue;
        }
 
        break;
    }
    freeaddrinfo(res);
 
    if (rp == NULL) {
        return -1;
    }
 
    // BACKLOG 120
    status = listen(sockfd, 120);
    if (status == -1) {
        perror("listen() error");
        close(sockfd);
        return -1;
    }
 
    return sockfd;
}
c-socket-programming/library.txt · آخرین ویرایش: 2024/06/18 01:04 توسط pejman

به جز مواردی که ذکر می‌شود، مابقی محتویات ویکی تحت مجوز زیر می‌باشند: Public Domain
Public Domain Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki