sockcmd.c
上传用户:hepax88
上传日期:2007-01-03
资源大小:1101k
文件大小:1k
源码类别:

TCP/IP协议栈

开发平台:

Visual C++

  1. /* Socket status display code
  2.  * Copyright 1991 Phil Karn, KA9Q
  3.  */
  4. #include <stdio.h>
  5. #include "global.h"
  6. #include "mbuf.h"
  7. #include "proc.h"
  8. #include "lzw.h"
  9. #include "usock.h"
  10. #include "socket.h"
  11. #include "commands.h"
  12. /* Socket status display command */
  13. int
  14. dosock(argc,argv,p)
  15. int argc;
  16. char *argv[];
  17. void *p;
  18. {
  19. register struct usock *up;
  20. int s,i,n;
  21. struct sockaddr fsock;
  22. struct socklink *sp;
  23. char *cp;
  24. if(argc < 2){
  25. printf("S#   Type    PCB       Remote socket         Ownern");
  26. for(n=0;n<Nsock;n++){
  27. s = _mk_fd(n,_FL_SOCK);
  28. up = itop(s);
  29. if(up == NULL)
  30. continue;
  31. i = sizeof(fsock);
  32. if(getpeername(s,&fsock,&i) == 0 && i != 0)
  33. cp = psocket(&fsock);
  34. else
  35. cp = "";
  36. printf("%4d %-8s%-9p %-22s%-9p %-10sn",
  37.  s,Socktypes[up->type],up->cb.p,cp,
  38.  up->owner,up->owner->name);
  39. }
  40. return 0;
  41. }
  42. s = atoi(argv[1]);
  43. if(_fd_type(s) != _FL_SOCK){
  44. printf("Not a valid socketn");
  45. return 1;
  46. }
  47. up = itop(s);
  48. if(up == NULL){
  49. printf("Socket not in usen");
  50. return 1;
  51. }
  52. sp = up->sp;
  53. printf("%s %pn",Socktypes[up->type],up->cb.p);
  54. if(up->cb.p == NULL)
  55. return 0;
  56. if(sp->status != NULL)
  57. (*sp->status)(up);
  58. return 0;
  59. }