📄 t_accept.c
字号:
/* * Copyright (C) 1999-2003 MITSUBISHI ELECTRIC CORPORATION and * RENESAS SOLUTIONS CORPORATION and * RENESAS TECHNOLOGY CORPORATION * All rights reserved. * * TCP/IP Test Application program [API]. */#include <tk/tkernel.h>#include <renesas_tcpip.h>#include <renesas_tcpip_common.h>#include "config.h"voidtest_task(int stacd, void *exinf){ int i, s, s2; int ret, pid; struct sockaddr_in name, addr; int namelen, addrlen; int num; int nonblock; int testno, testno2, result[13]; num = 1; testno = 0; memset((char *)result, 0, sizeof(result)); /* for setup: get normal socket */ errno = 0; if ((s = unix_socket(AF_INET, SOCK_STREAM, 0)) < 0) { goto testend; } memset((char *)&name, 0, sizeof(name)); name.sin_family = AF_INET; name.sin_addr.s_addr = inet_addr(TGT_ADDR); name.sin_port = htons(TGT_PORT); namelen = sizeof(name); if ((ret = unix_bind(s, (struct sockaddr *)&name, namelen)) < 0) { unix_close(s); goto testend; } if ((ret = unix_listen(s, 5)) < 0) { unix_close(s); goto testend; } /* Test 1 */ printf("Accept Test %d: \n",num++); errno = 0; addrlen = sizeof(addr); memset((char *)&addr, 0, addrlen);testno = 1; ret = unix_accept(-1, (struct sockaddr *)&addr, &addrlen); if (ret < 0) { printf("OK! : Bad socket fd(-1) EBADF errno=%d\n",errno); result[testno] = 0; } else { printf("Fail! : Bad socket fd(-1) EBADF errno=%d\n",errno); result[testno] = 1; } /* Test 2 */ printf("Accept Test %d: \n",num++); errno = 0;testno = 2; ret = unix_accept(10, (struct sockaddr *)&addr, &addrlen); if (ret < 0) { printf("OK! : Bad socket fd(10) EBADF errno=%d\n",errno); result[testno] = 0; } else { printf("Fail! : Bad socket fd(10) EBADF errno=%d\n",errno); result[testno] = 1; } /* Test 3 */ printf("Accept Test %d: \n",num++); errno = 0; if ((s2 = unix_socket(AF_INET, SOCK_DGRAM, 0)) < 0) { unix_close(s); goto testend; } else { errno = 0; if ((ret = unix_bind(s2, (struct sockaddr *)&name, namelen)) < 0) { unix_close(s); unix_close(s2); goto testend; } else { errno = 0; ret = unix_listen(s2, 5); if (ret < 0) printf("OK! :listen(s2(DGRAM), 5),EOPNOTSUPP, errno = %d \n",errno); else printf("Fail! :listen(s2(DGRAM), 5),EOPNOTSUPP, errno = %d \n",errno); errno = 0;testno = 3; ret = unix_accept(s2, (struct sockaddr *)&addr, &addrlen); if (ret < 0) { printf("OK! :accept(s2(DGRAM)),EINVAL, errno = %d \n",errno); result[testno] = 0; } else { printf("Fail! :accept(s2(DGRAM)),EINVAL, errno = %d \n",errno); result[testno] = 1; } } } if (s2 > 0) unix_close(s2); /* Test 4 */ printf("Accept Test %d: \n",num++); errno = 0;testno = 4; s2 = unix_accept(s, (struct sockaddr *)0, 0); if (s2 < 0) { printf("OK! : accept(s,0,0) \n"); result[testno] = 0; } else { printf("Fail! : accept(s,0,0) \n"); unix_close(s2); result[testno] = 1; } /* Test 5 */ printf("Accept Test %d: \n",num++); errno = 0;testno = 5; s2 = unix_accept(s, (struct sockaddr *)NULL, &addrlen); if (s2 < 0) { printf("OK! :accept(s, NULL, addrlen), EFAULT,errno = %d \n",errno); result[testno] = 0; } else { printf("Fail! :accept(s, NULL, addrlen), EFAULT,errno = %d \n",errno); result[testno] = 1; } /* Test 6 */ printf("Accept Test %d: \n",num++); errno = 0;testno = 6; s2 = unix_accept(s, (struct sockaddr *)&addr, (int *)NULL); if (s2 < 0) { printf("OK! :accept(s, addr, NULL), EFAULT,errno = %d \n",errno); result[testno] = 0; } else { printf("Fail! :accept(s, addr, NULL), EFAULT,errno = %d \n",errno); result[testno] = 1; } /* Test 7 */ printf("Accept Test %d: \n",num++); errno = 0;testno = 7; s2 = unix_accept(s, (struct sockaddr *)-1, &addrlen); if (s2 < 0) { printf("OK! :accept(s, -1, addrlen),EFAULT,errno = %d \n",errno); result[testno] = 0; } else { printf("Fail! :accept(s, -1, addrlen),EFAULT,errno = %d \n",errno); result[testno] = 1; } /* Test 8 */ printf("Accept Test %d: \n",num++); errno = 0;testno = 8; s2 = unix_accept(s, (struct sockaddr *)&addr, (int *)-1); if (s2 < 0) { printf("OK! :accept(s, addr, -1), EFAULT,errno = %d \n",errno); result[testno] = 0; } else { printf("Fail! :accept(s, addr, -1), EFAULT,errno = %d \n",errno); result[testno] = 1; } /* Test 9 */ printf("Accept Test %d: \n",num++); addrlen = 0; errno = 0;testno = 9; s2 = unix_accept(s, (struct sockaddr *)&addr, &addrlen); if (s2 < 0) { printf("OK! :accept(s, addr, addrlen(0)). but this will be ok., EINVAL,errno = %d \n",errno); result[testno] = 0; } if (s2 >= 0) { printf("Fail! :accept(s, addr, addrlen(0)). but this will be ok., EINVAL,errno = %d \n",errno); result[testno] = 1; unix_close(s2); } /* Test 10 */ printf("Accept Test %d: \n",num++); addrlen = -1; errno = 0;testno = 10; s2 = unix_accept(s, (struct sockaddr *)&addr, &addrlen); if (s2 < 0) { printf("OK! :accept(s, addr, addrlen(-1)). but this will be ok. EINVAL, errno = %d \n",errno); result[testno] = 0; } if (s2 >= 0) { printf("Fail! :accept(s, addr, addrlen(0)). but this will be ok., EINVAL,errno = %d \n",errno); result[testno] = 1; unix_close(s2); } addrlen = sizeof(addr); /* Test 11 */ printf("Accept Test %d: \n",num++); errno = 0;testno = 11; s2 = unix_accept(s, (struct sockaddr *)&addr, &addrlen); if (s2 >= 0) { printf("OK! :accept(s, addr, addrlen). but this will be ok., errno = %d \n",errno); result[testno] = 0; unix_close(s2); } else { printf("Fail! :accept(s, addr, addrlen). but this will be ok.,errno = %d \n",errno); result[testno] = 1; } /* Test 12 */ printf("Accept Test %d: \n",num++); errno = 0; nonblock = 1; ret = unix_ioctl(s, FIONBIO, (VP)&nonblock); if (ret < 0) { goto testend; }testno = 12; s2 = unix_accept(s, (struct sockaddr *)&addr, &addrlen); if (s2 < 0) { if (errno == EWOULDBLOCK) { printf("OK! :accept(s(for NOBLOCK), addr, addrlen), EWOULDBLOCK, errno = %d \n",errno); result[testno] = 0; unix_close(s2); } else { printf("Fail! :accept(s(for NOBLOCK), addr, addrlen), EWOULDBLOCK, errno = %d \n",errno); result[testno] = 1; } } if (s2 >= 0) { printf("Fail! :accept(s(for NOBLOCK), addr, addrlen), EWOULDBLOCK, errno = %d \n",errno); result[testno] = 1; } unix_shutdown(s2, SHUT_RDWR); unix_close(s2);#if defined(T_KERNEL) tk_slp_tsk(2000);#endiftestend: unix_shutdown(s, SHUT_RDWR); unix_close(s); /* check the results */ testno2 = 12; for (i=1; i <= testno; i++) { if (result[i] == 1) break; } if (i > testno2) printf("Pass.\n"); else printf("Error.\n");#if defined(T_KERNEL) tk_slp_tsk(TMO_FEVR);#endif}/* EOF */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -