|
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
|
|
|
|
|