मैं एक वेब सर्वर है कि दोनों IPv4 और IPv6 पते पर सुनता है लिखने की कोशिश कर रहा हूँ। हालांकि, मूल रूप से लिखा गया कोड काम नहीं करता था। तब मुझे पता चला कि आईपीवी 6 संरचनाएं आईपीवी 4 और आईपीवी 6 दोनों के लिए काम करती हैं। तो अब मैं आईपीवी 6 संरचनाओं का उपयोग करता हूं, हालांकि केवल आईपीवी 4 पते काम करते हैं। इस पोस्ट में, why can't i bind ipv6 socket to a linklocal address, server.sin6_scope_id = 5;
जोड़ने के लिए कहा है जो इतना मैंने वह किया लेकिन यह अभी भी आईपीवी 6 टेलनेट कनेक्शन स्वीकार नहीं करता है। किसी भी मदद की सराहना की जाएगी क्योंकि मैं पूरी तरह से स्टंप हूं।
धन्यवाद!बाध्यकारी सॉकेट संबोधित
मेरे कोड के नीचे है:
void initialize_server(int port, int connections, char* address)
{
struct sockaddr_in6 socket_struct;
/*Creates the socket*/
if ((sock_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
syslog(LOG_ERR, "%s\n", strerror(errno));
exit(EXIT_FAILURE);
}/*Ends the socket creation*/
/*Populates the socket address structure*/
socket_struct.sin6_family = AF_INET6;
if(address == NULL)
socket_struct.sin6_addr=in6addr_any;
else
{
inet_pton(AF_INET6, "fe80::216:3eff:fec3:3c22", (void *)&socket_struct.sin6_addr.s6_addr);
}
socket_struct.sin6_port =htons(port);
socket_struct.sin6_scope_id = 0;
if (bind(sock_fd, (struct sockaddr*) &socket_struct, sizeof(socket_struct)) < 0)
{
syslog(LOG_ERR, "%s\n", strerror(errno));
exit(EXIT_FAILURE);
}//Ends the binding.
if (listen(sock_fd, connections) <0)
{
syslog(LOG_ERR, "%s\n", strerror(errno));
exit(EXIT_FAILURE);
}//Ends the listening function
}//ends the initialize server function.
मुझे पता है कि आईपीवी 6 64-बिट है, इसलिए ipv6 का उपयोग करने वाले सर्वर 64-बिट ऑपरेटिंग सिस्टम पर चल रहे हैं। अभी के लिए ipv4 का उपयोग करें, अभी तक ipv6 का उपयोग कर बहुत सारे मुद्दे हैं। – GiantHornet
@GiantHornet: आईपीवी 6 न तो 32-बिट और न ही 64-बिट है; यह या तो अन्य सिस्टम पर भी चला सकता है। –
@GiantHornet हाँ, मुझे यह ठीक नहीं लगता क्योंकि मेरी उबंटू मशीन i686 है जो 32-बिट है और इसमें आईपीवी 6 पता – tpar44