t1.C 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. #include "cpoll.H"
  2. #include <sys/types.h>
  3. #include <sys/stat.h>
  4. #include <fcntl.h>
  5. using namespace std;
  6. using namespace CP;
  7. int main()
  8. {
  9. Poll p;
  10. File f(0); //stdin
  11. File f2(1); //stdout
  12. File f3(open("/etc/passwd", O_RDONLY));
  13. /*char buf[4096];
  14. f.read(buf, 4096, [&](int br)
  15. {
  16. cerr << br << " bytes read;" << endl;
  17. f3.read(buf, 4096, [](int br){cout << br << " bytes read from file" << endl;});
  18. });*/
  19. //generate troll
  20. stringstream ss1;
  21. ss1 << "troll";
  22. for(int i=0;i<30;i++)
  23. ss1 << " lol";
  24. string str1=ss1.str();
  25. stringstream ss2;
  26. for(int i=0;i<5000;i++)
  27. ss2 << str1 << endl;
  28. string str2=ss2.str();
  29. const char* cstr2=str2.data();
  30. int cstr2len=str2.length();
  31. const char* httphdr="HTTP/1.1 200 OK\r\nConnection: close\r\n\r\n";
  32. int httphdr_len=strlen(httphdr);
  33. Socket* s1=new Socket();
  34. s1->bind(IPEndPoint(IPAddress("0.0.0.0"), 12345));
  35. s1->listen();
  36. //cout << (void*)s1->accept();
  37. s1->repeatAccept([&](Socket* s) {
  38. if(s==NULL)return;
  39. cout << "accepted socket " << s->handle << endl;
  40. //s.retain();
  41. /*char* buf=new char[4096];
  42. s->repeatRead(buf, 4096, [buf, &f2, s](int l) {
  43. if(l<=0) {
  44. cerr << "closed socket " << s->handle << endl;
  45. free(buf);
  46. s->release();
  47. return;
  48. }
  49. f2.write(buf, l);
  50. });*/
  51. s->writeAll(httphdr, httphdr_len, [s,&cstr2,cstr2len](int l) {
  52. s->writeAll(cstr2, cstr2len, [s](int l) {
  53. char* buf=new char[4096];
  54. s->repeatRead(buf, 4096, [buf](int br) {
  55. if(br<=0)
  56. delete[] buf;
  57. });
  58. });
  59. });
  60. p.add(*s);
  61. s->release();
  62. });
  63. p.add(*s1);
  64. f2.write("aaaaa\n", 6, [](int bw){cerr << bw << " bytes written" << endl;});
  65. //f.loop();
  66. p.add(f);
  67. p.add(f2);
  68. p.add(f3);
  69. p.loop();
  70. /*File f(0); //stdin
  71. char buf[4096];
  72. f.read(buf,4096,[](int br){cout << "read " << br << endl;});
  73. Poll poll;
  74. poll.add(f);
  75. Poll poll2;
  76. poll2.add(poll);
  77. poll2.loop();*/
  78. }