first zero out your sockaddr_in structure before using it.
    bzero(&dp, sizeof(dp));

and then be sure and set the len field in sockaddr_in struct;
    dp.sin_len = sizeof(dp);

also... get rid of the htonl(bind_to_addr) because inet_addr puts the
address in network byte order.

i compiled with those changes and the bind succeeded.  my guess is the
sockaddr_in struct had garbage in the fields that werent initialized...
causing an error somewhere along the way.

-matt
----- Original Message -----
From: "Chris Given" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Tuesday, July 09, 2002 4:50 PM
Subject: Bind to specific address on FreeBSD


> I can't figure out why this code won't bind to 127.0.0.1 on FreeBSD. I get
> an error "Can't assign requested address".
>
> #include <stdio.h>
> #include <sys/types.h>
> #include <sys/time.h>
> #include <time.h>
> #include <sys/socket.h>
> #include <netinet/in.h>
> #include <netdb.h>
> #include <errno.h>
> #include <stdio.h>
> #include <string.h>
> #include <arpa/inet.h>
> #include <unistd.h>
> #include <stdlib.h>
>
> int main() {
> int sock;
> struct sockaddr_in dp;
> unsigned long bind_to_addr = inet_addr("127.0.0.1");
>
> sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
> if(sock < 0) {
> printf("Error socket : %s\n", strerror(errno));
> return -1;
> }
>
> dp.sin_family = AF_INET;
> dp.sin_addr.s_addr = htonl(bind_to_addr);
> dp.sin_port = htons(1234);
>
> if(bind(sock, (struct sockaddr*)&dp, sizeof(struct sockaddr_in))!=0)
> {
> printf("Bind failed : %s\n", strerror(errno));
> } else {
> printf("Bind success\n");
> }
> }
>
> To Unsubscribe: send mail to [EMAIL PROTECTED]
> with "unsubscribe freebsd-net" in the body of the message
>


To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-net" in the body of the message

Reply via email to