}
/* make a socket active by setting up the call back functions */
-int add_sock_callbacks(struct socket *sock, struct ceph_connection *con)
+int add_sock_callbacks(struct socket *sock, void *user_data)
{
struct sock *sk = sock->sk;
- sk->sk_user_data = con;
+ sk->sk_user_data = user_data;
printk(KERN_INFO "Entered add_sock_callbacks\n");
/* Install callbacks */
}
/* setup callbacks */
- add_sock_callbacks(con->sock, con);
+ add_sock_callbacks(con->sock, (void *)con);
ret = con->sock->ops->connect(con->sock, paddr,
msgr->listen_sock = NULL;
goto err;
}
+ add_sock_callbacks(msgr->listen_sock, (void *)msgr);
return ret;
err:
sock_release(sock);
goto done;
}
- /* setup callbacks */
- add_sock_callbacks(con->sock, con);
-
-
ret = sock->ops->accept(sock, con->sock, O_NONBLOCK);
- /* ret = kernel_accept(sock, &new_sock, sock->file->f_flags); */
if (ret < 0) {
printk(KERN_INFO "accept error: %d\n", ret);
goto err;
}
+
+ /* setup callbacks */
+ add_sock_callbacks(con->sock, (void *)con);
+
con->sock->ops = sock->ops;
con->sock->type = sock->type;
ret = con->sock->ops->getname(con->sock, paddr, &len, 2);
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
#include <netdb.h>
+#include <arpa/inet.h>
+#include <netinet/in.h>
-int main(int argc, char *argv[])
+int main(int argc, char **argv)
{
- int sd, port,len;
+ int port, sd, len;
+ struct hostent *host;
+ struct in_addr h_addr;
struct sockaddr_in saddr;
- struct hostent *server;
char buf[256];
- if (argc < 3) {
+
+ if (argc != 3) {
fprintf(stderr,"usage %s hostname port\n", argv[0]);
exit(1);
}
+ if ((host = gethostbyname(argv[1])) == NULL) {
+ fprintf(stderr, "nslookup failed on '%s'\n", argv[1]);
+ exit(1);
+ }
+ h_addr.s_addr = *((unsigned long *) host->h_addr_list[0]);
+ fprintf(stdout, "%s\n", inet_ntoa(h_addr));
port = atoi(argv[2]);
printf("port num = %d\n", port);
+
sd = socket(AF_INET, SOCK_STREAM, 0);
if (sd < 0) {
fprintf(stderr,"socket open error");
exit(1);
}
- server = gethostbyname(argv[1]);
- printf("server name = %s\n", server->h_name);
- printf("server ip = %s\n", *(server->h_addr));
- if (server == NULL) {
- fprintf(stderr,"get host error\n");
- exit(1);
- }
- bzero((char *) &saddr, sizeof(saddr));
- saddr.sin_family = AF_INET;
- bcopy((char *)server->h_addr, (char *)&saddr.sin_addr.s_addr,
- server->h_length);
- saddr.sin_port = htons(port);
- if (connect(sd,(struct sockaddr *)&saddr,sizeof(saddr)) < 0) {
- fprintf(stderr,"connection error\n");
- exit(1);
- }
- printf("connected to kernel server\n");
+ printf("created socket\n");
+ bzero((char *) &saddr, sizeof(saddr));
+ saddr.sin_family = AF_INET;
+ bcopy((char *)host->h_addr, (char *)&saddr.sin_addr.s_addr,
+ host->h_length);
+ saddr.sin_port = htons(port);
+ if (connect(sd,(struct sockaddr *)&saddr,sizeof(saddr)) < 0) {
+ fprintf(stderr,"connection error\n");
+ exit(1);
+ }
+ printf("connected to kernel host\n");
bzero(buf,256);
len = read(sd,buf,255);
if (len < 0) {
}
printf("Message received: %s\n",buf);
- printf("Please enter the message: ");
- bzero(buf,256);
- fgets(buf,255,stdin);
- len = write(sd,buf,strlen(buf));
- if (len < 0) {
- fprintf(stderr,"write error\n");
- exit(1);
- }
- bzero(buf,256);
- len = read(sd,buf,255);
- if (len < 0) {
- fprintf(stderr,"write error\n");
- exit(1);
- }
- printf("received message %s\n",buf);
+ printf("Please enter the message: ");
+ bzero(buf,256);
+ fgets(buf,255,stdin);
+ len = write(sd,buf,strlen(buf));
+ if (len < 0) {
+ fprintf(stderr,"write error\n");
+ exit(1);
+ }
+ bzero(buf,256);
+ len = read(sd,buf,255);
+ if (len < 0) {
+ fprintf(stderr,"write error\n");
+ exit(1);
+ }
+ printf("received message %s\n",buf);
close(sd);
exit(0);
}