Unix Programming - Problem using sockets

This is Interesting: Free IT Magazines  
Home > Archive > Unix Programming > January 2007 > Problem using sockets





You are viewing an archived Text-only version of the thread. To view this thread in it's original format and/or if you want to reply to this thread please [click here]

Author Problem using sockets
Vlad Dogaru

2007-01-14, 7:20 am

(originally posted to comp.lang.c, but was directed here since standard
C does not include support for sockets).

Hello,

I am trying to write a simple program to teach myself sockets. The
following bit of code fails with:
"connect: Socket operation on non-socket". What am I missing?

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <errno.h>
#include <strings.h>
#include <sys/select.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <netdb.h>

int main(int argc, char **argv)
{
int s1, s2; /* socket descriptors */
extern int errno;
struct sockaddr_in sa1, sa2;
char aux[MAX_STR_LEN];
struct hostent *hp;

if (argc != 5) {
printf("Usage: %s <host1> <port1> <host2> <port2>\n", argv[0]);
return 0;
}

if ((hp=gethostbyname(argv[1])) == 0) {
perror("gethostbyname");
return errno;
}

bzero(&sa1, sizeof sa1);
sa1.sin_family = AF_INET;
sa1.sin_port = htons(atoi(argv[2]));
sa1.sin_addr.s_addr = ((struct in_addr *)(hp->h_addr))->s_addr;

if ((s1=socket(AF_INET, SOCK_STREAM, 0) == -1)) {
perror("socket");
return errno;
}

if (connect(s1, (void *) &sa1, sizeof (sa1)) == -1) {
perror("connect");
return errno;
}
printf("Socket 1 connected");

Also, having two sockets open, can I use select() to read from them?
Can someone please point me to an example of using select() with
sockets?

Thanks in advance,
Vlad

Bjørn Augestad

2007-01-14, 7:20 am

Vlad Dogaru wrote:
> (originally posted to comp.lang.c, but was directed here since standard
> C does not include support for sockets).
>
> Hello,
>
> I am trying to write a simple program to teach myself sockets. The
> following bit of code fails with:
> "connect: Socket operation on non-socket". What am I missing?
>
> #include <stdio.h>
> #include <sys/types.h>
> #include <sys/socket.h>
> #include <netinet/in.h>
> #include <errno.h>
> #include <strings.h>
> #include <sys/select.h>
> #include <stdlib.h>
> #include <string.h>
> #include <unistd.h>
> #include <netdb.h>
>
> int main(int argc, char **argv)
> {
> int s1, s2; /* socket descriptors */
> extern int errno;
> struct sockaddr_in sa1, sa2;
> char aux[MAX_STR_LEN];
> struct hostent *hp;
>
> if (argc != 5) {
> printf("Usage: %s <host1> <port1> <host2> <port2>\n", argv[0]);
> return 0;
> }
>
> if ((hp=gethostbyname(argv[1])) == 0) {
> perror("gethostbyname");
> return errno;
> }
>
> bzero(&sa1, sizeof sa1);
> sa1.sin_family = AF_INET;
> sa1.sin_port = htons(atoi(argv[2]));
> sa1.sin_addr.s_addr = ((struct in_addr *)(hp->h_addr))->s_addr;
>
> if ((s1=socket(AF_INET, SOCK_STREAM, 0) == -1)) {

---------------------------------------------^
You have a bug here, don't you? ;-)

HTH
Bjørn
[snip]
loic-dev@gmx.net

2007-01-14, 1:17 pm

Hello,

> ---------------------------------------------^
> You have a bug here, don't you? ;-)


Yes, looks like... a misplaced parenthesis... ;-)

Cheers,
Loic.

Vlad Dogaru

2007-01-15, 7:26 am


Bj=F8rn Augestad wrote:
> Vlad Dogaru wrote:
> ---------------------------------------------^
> You have a bug here, don't you? ;-)


Wow, I guess that's what I get for using a small font. Thanks for the
tip -- I wasted half a day trying to figure out what went wrong.

Vlad

Aggelos Mpimpoudis

2007-01-18, 7:28 am

> Wow, I guess that's what I get for using a small font. Thanks for the
> tip -- I wasted half a day trying to figure out what went wrong.
>
> Vlad
>



You 'll get used to it.
Classic anger management needed situation :P:P:P
Sponsored Links






Free braindumps | Software forum | Database administration forum

Copyright 2003 - 2008 webservertalk.com