c-socket-programming:setsockopt
تابع ()setsockopt
این تابع برای ایجاد تغییرات در option های یک سوکت استفاده می شود.
// 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);
گاهی هنگام اجرای مجدد یک سرور با خطای «Address already in use» مواجه می شویم.
برای جلو گیری از این خطا باید بعد از گرفتن ()socket و قبل از فراخوانی ()bind ، تابع ()setsockopt به شکل زیر فراخوانی شود:
// man 7 socket int option=1; if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (void*)&option, sizeof option) == -1) { perror("setsockopt"); exit(1); }
برای پشتیبانی از dual-stack می توان یک سوکت IPv6 با hints زیر از تابع ()socket گرفت :
hints.ai_flags = AI_PASSIVE; hints.ai_family = AF_INET6; hints.ai_socktype = SOCK_STREAM; hints.ai_protocol = 0;
و سپس با اجرای تابع ()setsockopt به شکل زیر از همان یک سوکت برای اتصال همزمان به IPv4 و IPv6 استفاده کرد:
// man 7 ipv6 int option=0; if (setsockopt(sockfd, IPPROTO_IPV6, IPV6_V6ONLY, (void*)&option, sizeof option) == -1) { perror("setsockopt"); exit(1); }
c-socket-programming/setsockopt.txt · آخرین ویرایش: 2024/06/18 00:59 توسط pejman
