ابزار کاربر

ابزار سایت


socket-programming:library

تفاوت‌ها

تفاوت دو نسخهٔ متفاوت از صفحه را مشاهده می‌کنید.

پیوند به صفحه‌ی تفاوت‌ها

socket-programming:library [2024/06/18 00:32] – ایجاد شد pejmansocket-programming:library [2024/06/18 01:04] (فعلی) – حذف شد pejman
خط 1: خط 1:
-====== کتابخانه توابع ====== 
- 
-<code C> 
- 
-// 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); 
-} 
- 
-</code> 
- 
- 
-<code C> 
-#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; 
-} 
-</code> 
  
socket-programming/library.1718658168.txt.gz · آخرین ویرایش: 2024/06/18 00:32 توسط pejman

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