/internetRelayChat

Internet Relay Chat Server

Primary LanguageC++

ft_irc - Internet Relay Chat Server

Version: 8

Table of Contents

  1. Introduction
  2. General Rules
  3. Mandatory Part
    1. Requirements
    2. For MacOS Only
    3. Test Example
  4. Bonus Part
  5. Submission and Peer-Evaluation

Introduction

Welcome to ft_irc, an IRC server implementation in C++98. This project is focused on creating a robust Internet Relay Chat (IRC) server that adheres to solid standards and protocols for real-time communication over the internet.

Internet Relay Chat (IRC)

IRC is a text-based communication protocol used on the internet. It enables real-time messaging, supporting both public and private communication. Users can exchange direct messages and join group channels. IRC clients connect to IRC servers, forming a network of interconnected servers.

general

General Rules

  • Ensure the program does not crash under any circumstances, even when running out of memory.
  • Provide a Makefile that compiles source files without relinking.
  • Compile code with c++ using the flags -Wall -Wextra -Werror.
  • Code must comply with the C++98 standard.
  • Avoid external libraries, and Boost libraries are forbidden.

Mandatory Part

Requirements

  • Develop an IRC server named ircserv.
  • The server must handle multiple clients simultaneously without hanging.
  • Use non-blocking I/O operations; forking is not allowed.
  • Utilize only one poll() (or equivalent) for handling read, write, listen, and other operations.
  • Implement features similar to an official IRC server, including user authentication, setting a nickname, joining channels, sending and receiving private messages, etc.
  • Support communication between clients and the server via TCP/IP (v4 or v6).

For MacOS Only

  • Use fcntl() for MacOS to implement non-blocking mode.
  • Use fcntl(fd, F_SETFL, O_NONBLOCK); any other flag is forbidden.

Test Example

To verify your server, use tools like nc and test various scenarios, including partial data reception and low bandwidth.

Bonus Part

Enhance your IRC server with additional features if the mandatory part is perfect. Bonus features include handling file transfers and implementing a bot.