--------------
select 함수
--------------
--- select
select 는 상태가 변경되는 파일 기술자들의 숫자를 기다린다.
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
int select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
n : 감시하려는 파일 기술자들의 최고 큰 숫자 + 1
readfds : 읽기 감시 구조체
writefds : 쓰기 감시 구조체
exceptfds : 에러 감시 구조체
timeout : 감시 대기 시간. NULL값 줄 시 감시 될 때까지 무한대기
리턴값
성공시
파일 기술자 집합에 포함된 기술자들의 숫자를 반환, 어떠한 일이 일어나기 전에 타임아웃이 발생하면 0을 반환한다.
실패시
-1 반환, errno 는 적당한 값으로 설정된다. 집합들과 timeout 은 정의가 안되며, 그래서 에러후 이것들의 내용에 의지할수 없다.
--- fd_set 구조체
--- timeval 구조체
구조체 내에 변수의 값 만큼 대기한다.
struct timeval
{
long tv_sec; /* seconds */
long tv_usec; /* microseconds */
}
--- FD_CLR
fdset 중 소켓 fd에 해당하는 비트를 0으로 한다.
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
FD_CLR(int fd, fd_set *set);
fd : 비트를 0으로 바꿀 파일 디스크립터
set : 목표로 하는 fd_set 구조체
--- FD_ZERO
fdset 의 모든 비트를 지운다.
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
FD_ZERO(fd_set *fdset);
fdset : 모든 비트를 0으로 set 시킬 fd_set 구조체
--- FD_SET
fdset 중 소켓 fd에 해당하는 비트를 1로 한다.
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
FD_SET(int fd, fd_set *fdset);
fd : 비트를 1로 바꿀 파일 디스크립터
fdset : 목표로 하는 fd_set 구조체
--- FD_ISSET
fdset 중 소켓 fd에 해당하는 비트가 세트되어 있으면 양수값인 fd를 리턴한다.
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
FD_ISSET(int fd, fd_set *fdset);
fd : 비트를 알아볼 파일 디스크립터
fdset : 알아볼 fd_set 구조체
--- select 함수를 이용한 server와 client 1:1 채팅 프로그램
client 소스
server 소스
결과
--- server 에서 client 정보 보기
1:1 채팅을 하는데 client의 정보를 확인하기
우선 예전에 ip번호를 할당할 때
int inet_aton(const char *cp, struct in_addr *inp);
( in_addr 구조체 찾은 방법)
$grep -R "struct in_addr" /usr/include/linux/
이제 server 소스를 수정하기로 한다.
실행화면
이제 client의 port 번호도 추가로
실행화면
'코스웨어 > 14년 스마트컨트롤러' 카테고리의 다른 글
프로젝트 발표 김대희 코멘트 (0) | 2014.06.30 |
---|---|
프로젝트 발표 코멘트 - 고한솔 (0) | 2014.06.30 |
프로젝트 발표 코멘트 - 고윤석 (0) | 2014.06.30 |
2014.06.27 업무보고 - 17번 오두환 (12) | 2014.06.27 |
20140625손병규_수업정리(출석번호 14번) (8) | 2014.06.25 |
21040624서상우수업보고서 (14) | 2014.06.24 |
20140623 박영주 일일보고서 (12) | 2014.06.23 |
20140620 일일업무보고서 11번 문대영 (14) | 2014.06.20 |