Using socket on QNX v.6

Hi all…
I’m so sorry to keep posting the same question,
(If you read the message I posted, you might know what I wanna know.)

The thing I really wanna know is how to create a ICMP Socket and write a
message
using this socket.

I’ve tried but it didn’t work, I’ll show you the code I wrote below…

If you have any idea or know what the problem is, please tell me,

Have a lovely day,

Jang-Hun

code I wrote :

#include <sys/socket.h>
#include <sys/types.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <net/if.h>

#define SERV_ADDR “165.133.182.10”
#define SERV_PORT 20000


int icmp_socket;
struct sockaddr_in icmp_sockaddr;
struct sockaddr_in serv_sockaddr;
struct ifreq ifreq;

char msg[] = “Message from a client”;

void init_socket() {

bzero( (char *)&icmp_sockaddr, sizeof(icmp_sockaddr) );
icmp_sockaddr.sin_family = AF_INET;
icmp_sockaddr.sin_port = htons( 0 );
icmp_sockaddr.sin_addr.s_addr = htonl( INADDR_ANY );

bzero( (char *)&serv_sockaddr, sizeof(serv_sockaddr) );
serv_sockaddr.sin_family = AF_INET;
serv_sockaddr.sin_port = htons( SERV_PORT );
serv_sockaddr.sin_addr.s_addr = inet_addr( SERV_ADDR );
}

main() {

int res, opt;
char *ppp0 = “ppp0”;
char *ppp1 = “ppp1”;

icmp_socket = socket( AF_INET, SOCK_RAW, IPPROTO_ICMP );
if( icmp_socket < 0 ) {
printf( “Can’t create a gre-socket\n” );
exit( -1 );
}
printf(“create icmp socket success, sd = %d\n”, icmp_socket);

//#if 0

opt = 1;

res = setsockopt( icmp_socket, SOL_SOCKET, SO_DONTROUTE,
(char *)&opt, sizeof(int) );
if( res < 0 ) {
printf( “Error : SO_DONTROUTE\n” );
exit( -1 );
}

res = setsockopt( icmp_socket, SOL_SOCKET, SO_BROADCAST,
(char *)&opt, sizeof(int) );
if( res < 0 ) {
printf( “Error : SO_BROADCAST\n” );
exit( -1 );
}

memset( &ifreq, 0, sizeof(ifreq) );
strcpy( ifreq.ifr_name, ppp0 );
res = setsockopt( icmp_socket, SOL_SOCKET, SO_BINDTODEVICE,
(char *)&ifreq, sizeof(ifreq) );
if( res < 0 ) {
printf( “Can’t bind to a specific device : %d\n”, res );
exit( -1 );
}

//#endif

/*
res = sendto( icmp_socket,
msg, sizeof(msg),
0,
(struct sockaddr *)&serv_sockaddr,
sizeof(serv_sockaddr) );
//res = write(icmp_socket, “hello”, 5);
if( res < 0 ) {
printf( “Can’t send a message\n” );
exit( -1 );
}
*/

printf( “Done\n” );

close( icmp_socket );

exit( 0 );
}

I’ve forgotten calling ‘init_socket()’.

have a nice day…

Jang-Hun




“JangHun” <khun25@hotmail.com> wrote in message
news:9uhj7g$80l$1@inn.qnx.com

Hi all…
I’m so sorry to keep posting the same question,
(If you read the message I posted, you might know what I wanna know.)

The thing I really wanna know is how to create a ICMP Socket and write a
message
using this socket.

I’ve tried but it didn’t work, I’ll show you the code I wrote below…

If you have any idea or know what the problem is, please tell me,

Have a lovely day,

Jang-Hun

code I wrote :

#include <sys/socket.h
#include <sys/types.h
#include <stdio.h
#include <netinet/in.h
#include <arpa/inet.h
#include <net/if.h

#define SERV_ADDR “165.133.182.10”
#define SERV_PORT 20000


int icmp_socket;
struct sockaddr_in icmp_sockaddr;
struct sockaddr_in serv_sockaddr;
struct ifreq ifreq;

char msg[] = “Message from a client”;

void init_socket() {

bzero( (char *)&icmp_sockaddr, sizeof(icmp_sockaddr) );
icmp_sockaddr.sin_family = AF_INET;
icmp_sockaddr.sin_port = htons( 0 );
icmp_sockaddr.sin_addr.s_addr = htonl( INADDR_ANY );

bzero( (char *)&serv_sockaddr, sizeof(serv_sockaddr) );
serv_sockaddr.sin_family = AF_INET;
serv_sockaddr.sin_port = htons( SERV_PORT );
serv_sockaddr.sin_addr.s_addr = inet_addr( SERV_ADDR );
}

main() {

int res, opt;
char *ppp0 = “ppp0”;
char *ppp1 = “ppp1”;

icmp_socket = socket( AF_INET, SOCK_RAW, IPPROTO_ICMP );
if( icmp_socket < 0 ) {
printf( “Can’t create a gre-socket\n” );
exit( -1 );
}
printf(“create icmp socket success, sd = %d\n”, icmp_socket);

//#if 0

opt = 1;

res = setsockopt( icmp_socket, SOL_SOCKET, SO_DONTROUTE,
(char *)&opt, sizeof(int) );
if( res < 0 ) {
printf( “Error : SO_DONTROUTE\n” );
exit( -1 );
}

res = setsockopt( icmp_socket, SOL_SOCKET, SO_BROADCAST,
(char *)&opt, sizeof(int) );
if( res < 0 ) {
printf( “Error : SO_BROADCAST\n” );
exit( -1 );
}

memset( &ifreq, 0, sizeof(ifreq) );
strcpy( ifreq.ifr_name, ppp0 );
res = setsockopt( icmp_socket, SOL_SOCKET, SO_BINDTODEVICE,
(char *)&ifreq, sizeof(ifreq) );
if( res < 0 ) {
printf( “Can’t bind to a specific device : %d\n”, res );
exit( -1 );
}

//#endif

/*
res = sendto( icmp_socket,
msg, sizeof(msg),
0,
(struct sockaddr *)&serv_sockaddr,
sizeof(serv_sockaddr) );
//res = write(icmp_socket, “hello”, 5);
if( res < 0 ) {
printf( “Can’t send a message\n” );
exit( -1 );
}
*/

printf( “Done\n” );

close( icmp_socket );

exit( 0 );
}