changeset 8:515c780e1c13

upload echoserver_cbc.cbc
author nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
date Tue, 07 Jun 2011 03:16:39 +0900
parents 6b57e23a26cb
children 493c96d030c0
files cbcecho/a.out cbcecho/detach_test.c cbcecho/detach_test.c~ cbcecho/echoserver.c cbcecho/echoserver_cbc.cbc cbcecho/echoserver_cbc.cbc~
diffstat 6 files changed, 405 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
Binary file cbcecho/a.out has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cbcecho/detach_test.c	Tue Jun 07 03:16:39 2011 +0900
@@ -0,0 +1,39 @@
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <pthread.h>
+
+void *detach_test(void *ptr)
+{
+  char *message = (char*)ptr;
+  printf("%s Start\n",message);
+  pthread_t self_thread = pthread_self();
+  
+  int status = pthread_detach(self_thread);
+
+  printf("sleep: start\n");
+  sleep(5);
+  printf("sleep: end\n");
+}
+
+
+int main(void)
+{
+  printf("main: start\n");
+
+  pthread_t thread1;
+  char *message1 = "Thread1";
+  int iret1;
+
+  printf("pthread_creat()\n");
+  iret1 = pthread_create( &thread1, NULL, detach_test, (void*)message1);
+
+
+  printf("pthread_join\n");  
+
+  pthread_join(thread1, NULL);
+
+  printf("main: end\n");
+
+  return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cbcecho/detach_test.c~	Tue Jun 07 03:16:39 2011 +0900
@@ -0,0 +1,13 @@
+#include <stdio.h>
+#include <unistd.h>
+
+
+
+void *detach_test(void)
+{
+  printf("detack_test: start");
+  sleep(5);
+  printf("detack_test: end");
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cbcecho/echoserver.c	Tue Jun 07 03:16:39 2011 +0900
@@ -0,0 +1,84 @@
+#include <stdio.h>
+#include <stdlib.h>;     /* exit() */
+#include <string.h>;     /* bzero() */
+#include <sys/types.h>;
+#include <sys/socket.h>; /* socket(), bind(), listen(), accept(), recv() */
+#include <netinet/in.h>; /* htons() */
+#include <unistd.h>;
+
+#define PORT    8080    /* Listenするポート */
+#define MAXDATA 1024    /* 受信バッファサイズ */
+
+int main(){
+  struct sockaddr_in saddr; /* サーバ用アドレス格納構造体 */
+  struct sockaddr_in caddr; /* クライアント用アドレス格納構造体 */
+  
+  int listen_fd;
+  int conn_fd;
+  
+  //int len = sizeof(struct sockaddr_in);
+  socklen_t len = sizeof(struct sockaddr_in);
+  
+  int rsize;
+  char buf[MAXDATA]; /* 受信バッファ */
+  
+  /* ソケットの生成 */
+  if ((listen_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
+    perror("socket");
+    exit(EXIT_FAILURE);
+  }
+  
+  /*
+   * saddrの中身を0にしておかないと、bind()でエラーが起こることがある
+   */
+  bzero((char *)&saddr, sizeof(saddr));
+  
+  /* ソケットにアドレスとポートを結びつける */
+  saddr.sin_family        = PF_INET;
+  saddr.sin_addr.s_addr   = INADDR_ANY;
+  saddr.sin_port          = htons(PORT);
+  if (bind(listen_fd, (struct sockaddr *)&saddr, len) < 0) {
+    perror("bind");
+    exit(EXIT_FAILURE);
+  }
+  
+  /* ポートをListenする */
+  if (listen(listen_fd, SOMAXCONN) < 0) {
+    perror("listen");
+    exit(EXIT_FAILURE);
+  }
+  printf("Start Listening Port : %d...\n", PORT);
+  
+  /* 接続要求を受け付ける */
+  if ((conn_fd = accept(listen_fd, (struct sockaddr *)&caddr, &len)) < 0) {
+    perror("accept");
+    exit(EXIT_FAILURE);
+  }
+  
+  /* Listeningソケットを閉じる */
+  close(listen_fd);
+  
+  /* 送信されたデータの読み出し */
+  do {
+    rsize = recv(conn_fd, buf, MAXDATA, 0);
+    
+    if (rsize == 0) { /* クラアイントが接続を切ったとき */
+      break;
+    } else if (rsize == -1) {
+      perror("recv");
+      exit(EXIT_FAILURE);
+    } else {
+      write(conn_fd, buf, rsize);
+    }
+  } while (1);
+  
+  if ( close(conn_fd) < 0) {
+    perror("close");
+    exit(EXIT_FAILURE);
+  }
+  
+  printf("Connection closed.\n");
+  return 0;
+  
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cbcecho/echoserver_cbc.cbc	Tue Jun 07 03:16:39 2011 +0900
@@ -0,0 +1,129 @@
+#include <stdio.h>
+#include <stdlib.h>     /* exit() */
+#include <string.h>     /* bzero() */
+#include <sys/types.h>
+#include <sys/socket.h> /* socket(), bind(), listen(), accept(), recv() */
+#include <netinet/in.h> /* htons() */
+#include <unistd.h>
+#include <pthread.h>
+
+#define PORT    8080    /* Listenするポート */
+#define MAXDATA 1024    /* 受信バッファサイズ */
+
+
+//__code echoaccept(int listen_fd, struct sockaddr *caddr, socklen_t *len );
+__code echoaccept(int listen_fd, void *caddr, void *len );
+//__code echoread(void *ptr);
+void *echoread(void *ptr);
+__code conref();
+__code confail();
+__code echowrite(int conn_fd, char *buf, int rsize);
+
+
+void main()
+{
+  struct sockaddr_in saddr; /* サーバ用アドレス格納構造体 */
+  struct sockaddr_in caddr; /* クライアント用アドレス格納構造体 */
+  
+  int listen_fd;
+  int conn_fd;
+  
+  //int len = sizeof(struct sockaddr_in);
+  socklen_t len = sizeof(struct sockaddr_in);
+  
+  int rsize;
+  char buf[MAXDATA]; /* 受信バッファ */
+  
+  /* ソケットの生成 */
+  if ((listen_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
+    perror("socket");
+    exit(EXIT_FAILURE);
+  }
+  
+  /*
+   * saddrの中身を0にしておかないと、bind()でエラーが起こることがある
+   */
+  bzero((char *)&saddr, sizeof(saddr));
+  
+  /* ソケットにアドレスとポートを結びつける */
+  saddr.sin_family        = PF_INET;
+  saddr.sin_addr.s_addr   = INADDR_ANY;
+  saddr.sin_port          = htons(PORT);
+  if (bind(listen_fd, (struct sockaddr *)&saddr, len) < 0) {
+    perror("bind");
+    exit(EXIT_FAILURE);
+  }
+  
+  /* ポートをListenする */
+  if (listen(listen_fd, SOMAXCONN) < 0) {
+    perror("listen");
+    exit(EXIT_FAILURE);
+  }
+  printf("Start Listening Port : %d...\n", PORT);
+  
+
+  /* 接続要求を受け付ける */
+  /*
+  if ((conn_fd = accept(listen_fd, (struct sockaddr *)&caddr, &len)) < 0) {
+    perror("accept");
+    exit(EXIT_FAILURE);
+  }
+  */
+
+  //  goto echoread((void *)&conn_fd);
+  goto echoaccept(listen_fd, (void *)&caddr, (void *)&len);
+}
+
+
+//__code echoaccept(int listen_fd, struct sockaddr *caddr, socklen_t *len )
+__code echoaccept(int listen_fd, void *caddr, void *len )
+{
+  int conn_fd;
+  if((conn_fd = accept(listen_fd, (struct sockaddr *)caddr, (socklen_t *)len)) < 0){
+    perror("accept");
+    exit(EXIT_FAILURE);
+  }else{
+    pthread_t thread;
+    pthread_create( &thread, NULL, (void *)echoread, (void *)&conn_fd);
+    goto echoaccept(listen_fd, caddr, len);
+  }
+}
+
+
+//__code *echoread(void *ptr)
+//__code echoread(void *ptr)
+void *echoread(void *ptr)
+{
+  int conn_fd = *(int*)ptr;
+  char buf[MAXDATA]; /* 受信バッファ */
+  int rsize;
+ 
+  rsize = recv(conn_fd, buf, MAXDATA, 0);
+
+  if(rsize == 0 ){/* if connection refused */
+    goto conref();
+  }else if(rsize == -1){
+    goto confail();
+  }else{
+    goto echowrite(conn_fd, buf, rsize);
+  }
+
+}
+
+__code conref()
+{
+    printf("connection refused");
+    exit(0);
+}
+
+__code confail()
+{
+    perror("recv");
+    exit(EXIT_FAILURE);
+}
+
+__code echowrite(int conn_fd, char *buf, int rsize)
+{
+  write(conn_fd, buf, rsize);
+  goto echoread((void *)&conn_fd);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/cbcecho/echoserver_cbc.cbc~	Tue Jun 07 03:16:39 2011 +0900
@@ -0,0 +1,140 @@
+#include <stdio.h>
+#include <stdlib.h>     /* exit() */
+#include <string.h>     /* bzero() */
+#include <sys/types.h>
+#include <sys/socket.h> /* socket(), bind(), listen(), accept(), recv() */
+#include <netinet/in.h> /* htons() */
+#include <unistd.h>
+#include <pthread.h>
+
+#define PORT    8080    /* Listenするポート */
+#define MAXDATA 1024    /* 受信バッファサイズ */
+
+
+//__code echoaccept(int listen_fd, struct sockaddr *caddr, socklen_t *len );
+__code echoaccept(int listen_fd, void *caddr, void *len );
+//__code echoread(void *ptr);
+void *echoread(void *ptr);
+__code conref();
+__code confail();
+__code echowrite(int conn_fd, char *buf, int rsize);
+
+
+void main()
+{
+  struct sockaddr_in saddr; /* サーバ用アドレス格納構造体 */
+  struct sockaddr_in caddr; /* クライアント用アドレス格納構造体 */
+  
+  int listen_fd;
+  int conn_fd;
+  
+  //int len = sizeof(struct sockaddr_in);
+  socklen_t len = sizeof(struct sockaddr_in);
+  
+  int rsize;
+  char buf[MAXDATA]; /* 受信バッファ */
+  
+  /* ソケットの生成 */
+  if ((listen_fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
+    perror("socket");
+    exit(EXIT_FAILURE);
+  }
+  
+  /*
+   * saddrの中身を0にしておかないと、bind()でエラーが起こることがある
+   */
+  bzero((char *)&saddr, sizeof(saddr));
+  
+  /* ソケットにアドレスとポートを結びつける */
+  saddr.sin_family        = PF_INET;
+  saddr.sin_addr.s_addr   = INADDR_ANY;
+  saddr.sin_port          = htons(PORT);
+  if (bind(listen_fd, (struct sockaddr *)&saddr, len) < 0) {
+    perror("bind");
+    exit(EXIT_FAILURE);
+  }
+  
+  /* ポートをListenする */
+  if (listen(listen_fd, SOMAXCONN) < 0) {
+    perror("listen");
+    exit(EXIT_FAILURE);
+  }
+  printf("Start Listening Port : %d...\n", PORT);
+  
+
+  /* 接続要求を受け付ける */
+  /*
+  if ((conn_fd = accept(listen_fd, (struct sockaddr *)&caddr, &len)) < 0) {
+    perror("accept");
+    exit(EXIT_FAILURE);
+  }
+  */
+
+  //  printf("conn_fd = %d\n",conn_fd);
+  //  printf("conn_fd.p = %p\n",&conn_fd);
+  
+  //  goto echoread((void *)&conn_fd);
+  
+  //  pthread_t thread;
+  //  pthread_create( &thread, NULL, (void *)echoread, (void *)conn_fd);
+  goto echoaccept(listen_fd, (void *)&caddr, (void *)&len);
+}
+
+
+//__code echoaccept(int listen_fd, struct sockaddr *caddr, socklen_t *len )
+__code echoaccept(int listen_fd, void *caddr, void *len )
+{
+  int conn_fd;
+  if((conn_fd = accept(listen_fd, (struct sockaddr *)caddr, (socklen_t *)len)) < 0){
+    perror("accept");
+    exit(EXIT_FAILURE);
+  }else{
+    pthread_t thread;
+    pthread_create( &thread, NULL, echoread, (void *)&conn_fd);
+    printf("sleep(5)\n");
+    goto echoaccept(listen_fd, caddr, len);
+  }
+}
+
+
+//__code echoread(int conn_fd)
+//__code echoread(void *ptr)
+void *echoread(void *ptr)
+{
+  printf("in echoread()");
+
+  int conn_fd = *(int*)ptr;
+  char buf[MAXDATA]; /* 受信バッファ */
+  int rsize;
+ 
+  printf("conn_fd = %d\n",conn_fd);
+
+  rsize = recv(conn_fd, buf, MAXDATA, 0);
+
+  if(rsize == 0 ){/* if connection refused */
+    goto conref();
+  }else if(rsize == -1){
+    goto confail();
+  }else{
+    goto echowrite(conn_fd, buf, rsize);
+  }
+
+}
+
+__code conref()
+{
+    printf("connection refused");
+    exit(0);
+}
+
+__code confail()
+{
+    perror("recv");
+    exit(EXIT_FAILURE);
+}
+
+__code echowrite(int conn_fd, char *buf, int rsize)
+{
+  write(conn_fd, buf, rsize);
+  goto echoread((void *)&conn_fd);
+}