ابزار کاربر

ابزار سایت


socket-programming:setsockopt

تفاوت‌ها

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

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

socket-programming:setsockopt [2024/06/18 00:27] – ایجاد شد pejmansocket-programming:setsockopt [2024/06/18 00:59] (فعلی) – حذف شد pejman
خط 1: خط 1:
-==== تابع ()setsockopt ==== 
  
-این تابع برای ایجاد تغییرات در option های یک سوکت استفاده می شود.  
-<code C> 
-// man 2 setsockopt 
-#include <sys/types.h> 
-#include <sys/socket.h> 
- 
-int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen); 
-</code> 
- 
- 
-گاهی هنگام اجرای مجدد یک سرور با خطای "Address already in use" مواجه می شویم.  
- 
-برای جلو گیری از این خطا باید بعد از گرفتن ()socket و قبل از فراخوانی ()bind ، تابع ()setsockopt به شکل زیر فراخوانی شود: 
-<code C> 
-// man 7 socket 
-int option=1; 
- 
-if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (void*)&option, sizeof option) == -1) { 
-  perror("setsockopt"); 
-  exit(1); 
-} 
-</code> 
- 
-برای پشتیبانی از dual-stack می توان **یک سوکت IPv6** با hints زیر از [[socket]] گرفت : 
-<code C> 
-    hints.ai_flags = AI_PASSIVE; 
-    hints.ai_family = AF_INET6; 
-    hints.ai_socktype = SOCK_STREAM; 
-    hints.ai_protocol = 0; 
-</code> 
- 
- و سپس با اجرای [[setsockopt]] به شکل زیر از همان یک سوکت برای اتصال همزمان به IPv4 و IPv6 استفاده کرد: 
- 
-<code C> 
-// man 7 ipv6 
-int option=0; 
- 
-if (setsockopt(sockfd, IPPROTO_IPV6, IPV6_V6ONLY, (void*)&option, sizeof option) == -1) { 
-  perror("setsockopt"); 
-  exit(1); 
-} 
-</code> 
socket-programming/setsockopt.1718657860.txt.gz · آخرین ویرایش: 2024/06/18 00:27 توسط pejman

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