==== تابع ()setsockopt ==== این تابع برای ایجاد تغییرات در option های یک سوکت استفاده می شود. // man 2 setsockopt #include #include 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); }