# porter/libsrc/porter/api/potrCloseService.c

# 1 ファイル

## 1.1 porter/libsrc/porter/api/potrCloseService.c

potrCloseService 関数の実装。

### 1.1.1 作者

c-modernization-kit sample team

### 1.1.2 バージョン

1.0.0

### 1.1.3 日付

2026/03/04

### 1.1.4 著作権

Copyright (C) CompanyName, Ltd. 2026. All rights reserved.

# 2 関数

## 2.1 send_fin

    static void send_fin ( struct PotrContext_ *ctx )

## 2.2 potrCloseService

    POTR_EXPORT int POTR_API potrCloseService ( PotrHandle handle )

サービスを閉じます。

受信スレッドを停止し、ソケットをクローズしてリソースを解放します。
マルチキャストの場合はグループから離脱します。
本関数呼び出し後、handle は無効となります。

### 2.2.1 引数

- handle [in] potrOpenService() で取得したセッションハンドル。

### 2.2.2 戻り値

成功時は POTR_SUCCESS、失敗時は POTR_ERROR を返します。

### 2.2.3 補足

本関数呼び出し時、POTR_EVENT_DISCONNECTED コールバックは発火しません。
アプリケーション自身が明示的にサービスを閉じる操作は、接続状態変化イベントとして通知しない設計です。
UDP 通信種別の送信者 (POTR_ROLE_SENDER) が本関数を呼び出した場合は、POTR_FLAG_FIN パケットが送信されます。
TCP 通信種別 (POTR_TYPE_TCP / POTR_TYPE_TCP_BIDIR) では close() による TCP 切断が FIN 相当として機能します。
いずれの場合も、相手側では POTR_EVENT_DISCONNECTED が発火します。

### 2.2.4 警告

handle が NULL の場合は失敗を返します。

### 2.2.5 スレッド セーフティ

本関数はスレッドセーフではありません。
同一ハンドルに対して他の porter API と並行して呼び出さないでください。
本関数を呼び出す前に、同一ハンドルへのすべての potrSend() が完了していることを確認してください。