test_netbase.c
上传用户:jnmzc84
上传日期:2022-08-08
资源大小:35k
文件大小:2k
源码类别:

网络编程

开发平台:

Visual C++

  1. /**
  2.   @file test_netbase.c
  3.   @brief to test the http-netbase.c
  4. */
  5. #include "klhttp-netbase.h"
  6. #ifdef WIN32
  7. #include <winsock2.h>
  8. #endif
  9. #include <stdio.h>
  10. volatile int is_done = 0;  
  11. void read_cb( int fd, void *arg )
  12. {
  13. struct tcp_server *server = (struct tcp_server*)arg;
  14. if( fd == server->fd )
  15. {
  16. /* accept connection */
  17. int s = (int)accept( fd, 0, 0 );
  18. ts_server_add( server, s );
  19. printf( "accept new connn" );
  20. }
  21. else
  22. {
  23. char buf[4096];
  24. int ret = recv( fd, buf, sizeof( buf ), 0 );
  25. if( ret == 0 )
  26. {
  27. closesocket( fd );
  28. ts_server_remove( server, fd );
  29. printf( "disconnect a connn" );
  30. }
  31. }
  32. }
  33. void write_cb( int fd, void *arg )
  34. {
  35. struct tcp_server *server = (struct tcp_server*)arg;
  36. }
  37. /**
  38.   handle the ctrl+c event.
  39. */
  40. #ifdef WIN32
  41. BOOL WINAPI Handler( DWORD ctrl_event )
  42. {
  43. switch( ctrl_event )
  44. {
  45. case CTRL_CLOSE_EVENT:
  46. case CTRL_C_EVENT:
  47. {
  48. /* shutdown the server */
  49. is_done = 1;
  50. }
  51. return TRUE;
  52. }
  53. return FALSE;
  54. }
  55. #endif
  56. int main()
  57. {
  58. struct tcp_server server;
  59. int ret ;
  60. struct timeval timeout = { 0, 0 };
  61. #ifdef WIN32
  62. if( !SetConsoleCtrlHandler( Handler, TRUE ) )
  63. {
  64. fprintf( stderr, "error setting event handler.n" );
  65. return -1;
  66. }
  67. #endif
  68. #ifdef WIN32
  69. {
  70. WSADATA wd;
  71. ret = WSAStartup( MAKEWORD( 2, 0 ), &wd );
  72. if( ret < 0 )
  73. {
  74. fprintf( stderr, "winsock startup failedn" );
  75. exit( -1 );
  76. }
  77. }
  78. #endif
  79. ret = ts_server_startup( &server, "0.0.0.0", 8080, 1024, read_cb, write_cb, &server );
  80. if( ret < 0 )
  81. {
  82. fprintf( stderr, "server starup failedn" );
  83. exit( -1 );
  84. }
  85. printf( "server startupn" );
  86. while( is_done == 0 )
  87. {
  88. ts_server_poll( &server, &timeout );
  89. }
  90. ts_server_cleanup( &server );
  91. printf( "server shutdownn" );
  92. #ifdef WIN32
  93. WSACleanup();
  94. #endif
  95. return 0;
  96. }