Reputation: 139
I have to port existing Win API application to work with TCPv6. Can't figure out how to bind socket to localhost.
Earlier was:
struct sockaddr_in ServerAddress;
ListenSocket = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP, NULL, 0, WSA_FLAG_OVERLAPPED);
...
ServerAddress.sin_family = AF_INET;
ServerAddress.sin_addr.s_addr = inet_addr("127.0.0.1");
ServerAddress.sin_port = htons(nPortNo);
Now, I'm trying:
struct sockaddr_in ServerAddress;
ListenSocket = WSASocket(AF_INET6, SOCK_STREAM, IPPROTO_TCP, NULL, 0, WSA_FLAG_OVERLAPPED);
...
ServerAddress.sin_family = AF_INET6;
ServerAddress.sin_addr.s_addr = inet_addr("::1");
ServerAddress.sin_port = htons(nPortNo);
And bind returns SOCKET_ERROR
There is a page from MS https://msdn.microsoft.com/en-us/library/windows/desktop/ms737937%28v=vs.85%29.aspx but there is no bind example
Upvotes: 0
Views: 337
Reputation: 73304
I think what you want to do is this:
struct sockaddr_in6 ServerAddress;
ListenSocket = WSASocket(AF_INET6, SOCK_STREAM, IPPROTO_TCP, NULL, 0, WSA_FLAG_OVERLAPPED);
...
ServerAddress.sin6_family = AF_INET6;
if (InetPton(AF_INET6, "::1", sockAddr.sin6_addr.s6_addr) != 1) printf("error, inet_pton() failed!\n");
ServerAddress.sin6_port = htons(nPortNo);
Upvotes: 1