Overview. Daemon processes and advanced I/O. Source: Chapters 13&14 of Stevens book

Similar documents
Lecture 10 Overview!

Overview. Last Lecture. This Lecture. Daemon processes and advanced I/O functions

Motivation of VPN! Overview! VPN addressing and routing! Two basic techniques for VPN! ! How to guarantee privacy of network traffic?!

Lecture 5 Overview! Last Lecture! This Lecture! Next Lecture! I/O multiplexing! Source: Chapter 6 of Stevens book!

Network programming(ii) Lenuta Alboaie

Programming Internet with Socket API. Hui Chen, Ph.D. Dept. of Engineering & Computer Science Virginia State University Petersburg, VA 23806

Outline. Distributed Computer Systems. Socket Basics An end-point for a IP network connection. Ports. Sockets and the OS. Transport Layer.

ISA 563: Fundamentals of Systems Programming

Outline. Operating Systems. Socket Basics An end-point for a IP network connection. Ports. Network Communication. Sockets and the OS

EEC-484/584 Computer Networks

CS4700/CS5700 Fundamentals of Computer Networking

STUDY OF SOCKET PROGRAMMING

Outline. Distributed Computing Systems. Socket Basics (1 of 2) Socket Basics (2 of 2) 3/28/2014

CS631 - Advanced Programming in the UNIX Environment. Dæmon processes, System Logging, Advanced I/O

Elementary TCP Sockets

Contents. Part 1. Introduction and TCP/IP 1. Foreword Preface. xix. I ntroduction 31

Never Lose a Syslog Message

NETWORK PROGRAMMING. Instructor: Junaid Tariq, Lecturer, Department of Computer Science

FastFlow: targeting distributed systems Massimo Torquati

Operating Systems. Lecture 06. System Calls (Exec, Open, Read, Write) Inter-process Communication in Unix/Linux (PIPE), Use of PIPE on command line

What could be done in the kernel to make strace happy

NETWORK PROGRAMMING. Ipv4 and Ipv6 interoperability

Expires: April 20, 2006 M. Tuexen Muenster Univ. of Applied Sciences T. Dreibholz University of Duisburg-Essen October 17, 2005

UNIX Sockets. Developed for the Azera Group By: Joseph D. Fournier B.Sc.E.E., M.Sc.E.E.

TCP: Three-way handshake

Standards / Extensions C or C++ Dependencies POSIX.1 XPG4 XPG4.2 Single UNIX Specification, Version 3

Lecture 3 Overview! Last Lecture! TCP/UDP and Sockets introduction!

Ken French HELP Session 1 CS4514

CptS 360 (System Programming) Unit 17: Network IPC (Sockets)

CMPS 105 Systems Programming. Prof. Darrell Long E2.371

CLIENT-SIDE PROGRAMMING

UNIX Network Programming

Delayline A Wide-Area Network Emulation Tool

CS 351 Week 15. Course Review

CSE 124 Discussion Section Sockets Programming 10/10/17

UDP CONNECT TO A SERVER

Group-A Assignment No. 6

Programming with TCP/IP. Ram Dantu

Interprocess Communication. Interprocess Communication

Lenuta Alboaie Computer Networks

Oral. Total. Dated Sign (2) (5) (3) (2)

sottotitolo Socket Programming Milano, XX mese 20XX A.A. 2016/17 Federico Reghenzani

The User Datagram Protocol

10. I/O System Library

Advanced Unix Concepts. Satyajit Rai

LINX(7) manual page. Name. Synopsis. Description. Linx Concepts. LINX(7) manual page. linx - LINX inter-process communication protocol

Socket programming in C

Networked Applications: Sockets. Goals of Todayʼs Lecture. End System: Computer on the ʻNet. Client-server paradigm End systems Clients and servers

Programming Ethernet with Socket API. Hui Chen, Ph.D. Dept. of Engineering & Computer Science Virginia State University Petersburg, VA 23806

Sistemas Operativos /2016 Support Document N o 1. Files, Pipes, FIFOs, I/O Redirection, and Unix Sockets

A Socket Example. Haris Andrianakis & Angelos Stavrou George Mason University

Interprocess Communication

Tutorial on Socket Programming

CSE 333 Section 8 - Client-Side Networking

Introduction! Overview! Signal-driven I/O for Sockets! Two different UDP servers!

Socket Programming. CSIS0234A Computer and Communication Networks. Socket Programming in C

Programming Ethernet with Socket API. Hui Chen, Ph.D. Dept. of Engineering & Computer Science Virginia State University Petersburg, VA 23806

Lecture 2. Outline. Layering and Protocols. Network Architecture. Layering and Protocols. Layering and Protocols. Chapter 1 - Foundation

Unix Network Programming Chapter 4. Elementary TCP Sockets 광운대학교컴퓨터과학과 정보통신연구실 석사과정안중현

SCTP in Go. arxiv: v1 [cs.ni] 20 Nov 2017

CSE 333 SECTION 3. POSIX I/O Functions

Ports under 1024 are often considered special, and usually require special OS privileges to use.

Network Programming. Multicast on a LAN 1/4. Sending & Receiving Multicast Messages. Multicasting II. Dr. Thaier Hayajneh

SOCKETS: INTRODUCTION

Introduction to Network Programming in C/C++

IPv4 and ipv6 INTEROPERABILITY

CS 43: Computer Networks. 05: Socket Programming September 12-14, 2018

Hybrid of client-server and P2P. Pure P2P Architecture. App-layer Protocols. Communicating Processes. Transport Service Requirements

Lecture 3. Introduction to Unix Systems Programming: Unix File I/O System Calls

Processes often need to communicate. CSCB09: Software Tools and Systems Programming. Solution: Pipes. Recall: I/O mechanisms in C

Operating Systems. Review ENCE 360

Windows architecture. user. mode. Env. subsystems. Executive. Device drivers Kernel. kernel. mode HAL. Hardware. Process B. Process C.

File Descriptors and Piping

CMPSC 311 Such Final Very Exam

CS631 - Advanced Programming in the UNIX Environment Interprocess Communication II

Any of the descriptors in the set {1, 4} have an exception condition pending

Lecture 24. Thursday, November 19 CS 375 UNIX System Programming - Lecture 24 1

Outline. Option Types. Socket Options SWE 545. Socket Options. Out-of-Band Data. Advanced Socket. Many socket options are Boolean flags

Lecture 7. Followup. Review. Communication Interface. Socket Communication. Client-Server Model. Socket Programming January 28, 2005

Systems Programming. 08. Standard I/O Library. Alexander Holupirek

CSE 410: Systems Programming

Socket Programming for TCP and UDP

Socket Programming. #In the name of Allah. Computer Engineering Department Sharif University of Technology CE443- Computer Networks

Chapter 6. The Transport Layer. Transport Layer 3-1

Operating System Labs. Yuanbin Wu

Linux Kernel Application Interface

Systems software design NETWORK COMMUNICATIONS & RPC SYSTEMS

Maria Hybinette, UGA. ! One easy way to communicate is to use files. ! File descriptors. 3 Maria Hybinette, UGA. ! Simple example: who sort

UNIX Sockets. COS 461 Precept 1

I/O in scientific applications

Processes. Operating System CS 217. Supports virtual machines. Provides services: User Process. User Process. OS Kernel. Hardware

Introduction to Network Programming using C/C++

Chapter 16. Network IPC: Sockets

Networked Applications: Sockets. End System: Computer on the Net

Unix-Linux 2. Unix is supposed to leave room in the process table for a superuser process that could be used to kill errant processes.

Outline. OS Interface to Devices. System Input/Output. CSCI 4061 Introduction to Operating Systems. System I/O and Files. Instructor: Abhishek Chandra

Embedded System Design

CSC209H Lecture 9. Dan Zingaro. March 11, 2015

CPSC 341 OS & Networks. Processes. Dr. Yingwu Zhu

Preview. Interprocess Communication with Pipe. Pipe from the Parent to the child Pipe from the child to the parent FIFO popen() with r Popen() with w

Transcription:

Overview Last Lecture Broadcast and multicast This Lecture Daemon processes and advanced I/O functions Source: Chapters 13&14 of Stevens book Next Lecture Unix domain protocols and non-blocking I/O Source: Chapters 15&16 of Stevens book

daemon A daemon is a process that runs in the background and is independent of control from all terminals Reasons for daemons independence of terminals Prevent daemons error message from appearing on a user s terminal Signals generated from terminal keys must not affect any daemons that were started from that terminal earlier Ways to start a daemon Started by the system initialization scripts Started by inetd superserver Performed by cron daemon on a regular basis Started from user terminals (foreground or background)

syslogd daemon How it works? Read the configuration file /etc/syslog.conf A Unix domain socket is created and bound to the pathname /var/run/log A UDP socket is created and bound to port 514 The pathname /dev/klog is opened to read kernel error messages Runs in an infinite loop that calls select, waiting for any one of the above descriptors to be readable, reads the log message, and does what the configuration file says to do with that message. If the daemon receives the SIGHUP signal, it rereads the configuration file

syslog function How to send log messages? create a Unix domain datagram socket and send our messages to the pathname the daemon has bound, or send them to port 514 by a UDP socket syslog function An easy interface to the syslogd daemon void syslog(int priority, const char *message, ); priority is a combination of a level and a facility shown later message is like a format string to printf, with the addition of a %m specification, which is replaced with the error message corresponding to the current value of errno.

level Log messages have a level between 0 and 7 If no level is specified, LOG_NOTICE is the default

facility Identify the type of process sending the message If no facility is specified, LOG_USER is the default

Example for syslog The following call could be issued by a mail daemon when a call to open unexpectedly fails: syslog(log_info LOG_MAIL, open(%s ): %m, file); When an application calls syslog for the first time, it creates a Unix domain datagram socket and then calls connect to the well-known pathname of the socket created by the syslogd daemon. This socket remains open until the process terminates. Alternatively, the process can call openlog and closelog void openlog(const char *ident, int options, int facility); ident is a string that will be inserted in front of each log message options is formed as the logical OR of one or more of the constants in Figure 12.3 facility specifies a default facility void closelog(void);

Options for openlog

daemon_init function Control flow of daemon_init (refer to lib/daemon_init.c) fork: change the process into a child process setsid: create a new session and the process becomes the session leader and group leader Ignore SIGHUP and fork again, so that the daemon cannot automatically acquire a controlling terminal should it open a terminal device in the future. We must ignore SIGHUP because when the session leader terminates, all processes in the session are sent the SIGHUP signal Set flag for error functions (err_xxx) so that they send error messages to syslogd. We cannot use printf to print any error message from a daemon (because of no controlling terminal) Change working directory and clear file mode creation mask Close any open descriptors openlog for errors

inetd daemon

Service handled by inetd

Service handled by inetd (cont.)

Daemon invoked by inetd Control flow (refer to inetd/daytimetcpsrv3.c) Set daemon flag so that err_xxx can print error messages to syslogd openlog Use getpeername to find out the peer address Receive requests from the client by reading from the descriptor 0 Send response to the client Close connection.

tcpd Control flow Check the client IP address using getpeername Check the service (port number) using getsockname Compare the above with the corresponding entries in hosts.allow and hosts.deny files and then decide if the connection should be closed or not If the connection is allowed, call exec to start the server (using argv)

Socket timeouts Three ways to place a timeout on an I/O operation involving a socket Call alarm, which generates the SIGALRM signal when the specified time has expired (refer to lib/connect_timeo.c and advio/dgclitimeo3.c) Block waiting for I/O in select, which has a time limit as an argument (refer to lib/readable_timeo.c) Use the newer SO_RCVTIMEO and SO_SNDTIMEO socket options (refer to advio/dgclitimeo2.c) The important point for the programmer is to find out how to test the timeout condition.

recv and send Prototype ssize_t recv(int sockfd, void *buff, size_t nbytes, int flags); ssize_t send(int sockfd, const void *buff, size_t nbytes, int flags); Both return: number of bytes read or written if OK, -1 on error The first three arguments are the same as the first three arguments to read and write flags is either 0, or is formed by logically OR ing one or more of the constants shown in Figure 13.6

Constants for flags

readv and writev Prototype ssize_t readv(int filedes, const struct iovec *iov, int iovcnt); Called scatter read since the input data is scattered into multiple application buffers ssize_t writev(int filedes, const struct iovec *iov, int iovcnt); Called gather write since multiple buffers are gathered for a single output operation. Both return: number of bytes read or written if OK, -1 on error struct iovec { void *iov_base; size_t iov_len;}; iovcnt is the number of elements in the array of iovec structures

recvmsg and sendmsg Prototype ssize_t recvmsg(int sockfd, struct msghdr *msg, int flags); ssize_t sendmsg(int sockfd, struct msghdr *msg, int flags); Both return: number of bytes read or written if OK, -1 on error struct msghdr { void *msg_name; socklen_t msg_namelen; struct iovec *msg_iov; size_t msg_iovlen; void *msg_control; socklen_t msg_controllen; int msg_flags;} msg_name and msg_namelen are used for unconnected UDP sockets to store a socket address and its length msg_control and msg_controllen are used for optional ancillary data msg_flags is used only by recvmsg. When recvmsg is called, the flags is copied into the msg_flags member and this value is used by the kernel to drive its receiving processing. This value is then updated based on the result of recvmsg msg_flags is ignored by sendmsg since this function uses its argument flags

Summary of flags

recvmsg

recvmsg (cont.)

Comparison of I/O functions

Ancillary data struct cmsghdr {socklen_t cmsg_len; int cmsg_level; int cmsg_type; /* followed by char array */ }

Ancillary data (cont.)

Macros for ancillary data

Example for macros

Miscellaneous Ways to find out how much data is queued Use MSG_PEEK flag (MSG_DONTWAIT for nonblocking) Use the FIONREAD command of ioctl Handle sockets with standard I/O library Use fdopen to convert a socket (descriptor) into a FILE pointer Standard I/O uses three types of buffering Fully buffered: I/O takes place only when the buffer is full, or the process calls fflush or exit Line buffered: I/O takes place only when a new line is encountered, or the process calls fflush or exit Unbuffered: I/O takes place each time a standard I/O output function is called Most Unix implements standard I/O based on the following rules Standard error is always unbuffered; standard input and output, and other streams are fully buffered, unless they refer to a terminal device, in which case they are line buffered.

T/TCP (TCP for Transactions)